2016-10-20 6 views
-1

Ich muss einen einfachen Spamfilter für meine Abschlussarbeit programmieren. Mein Zweck ist es, zwei verschiedene Listen zu öffnen und zu lesen, eine für Spam und eine für Ham. Der Name (cartella) ist wie Ordner in Englisch. Das Problem ist, dass wenn ich Spam drucke, es nur das erste Element des Arrays spam[0] druckt und wenn ich die Länge drucke druckt es 1, aber es sollte 1500 drucken. Das Problem liegt in der Funktion. Ich brauche Hilfe.Python - Versuche einen einfachen Antispamfilter zu erstellen

Dies ist mein Code:

import nltk 
import os 

def importalista(cartella): 
    lista=[] 
    listafile=os.listdir(cartella) 
    for file in listafile: 
     f=open(cartella + file, 'r+') 
     lista.append(f.read()) 
     f.close() 

     return lista 

spam = importalista('C:\\enron1\\spam\\') 
ham = importalista('C:\\enron1\\ham\\') 
print(len(spam)) 
+2

Da die 'return' Aussage ist in Ihrer' for' Schleife, wird Ihre Schleife immer nur für eine Iteration ausgeführt werden. Wenn Sie den 'return' aus der 'for'-Schleife entfernen, wird er zurückkommen, nachdem die for-Schleife abgeschlossen ist. – khelwood

+0

Ihre Return-Anweisung sollte nicht eingerückt sein, oder? Jetzt kommst du zurück, nachdem du die erste Datei gelesen hast. – user1337

+0

Vielen Dank für Ihre Antwort .. Also, wo sollte ich die Rückleitung setzen? –

Antwort

0

Sie haben return-Anweisung innerhalb der for-Schleife. Es wird die Funktion nach der ersten Iteration verlassen. Wenn Sie Ihren Code wie folgt ändern, wäre es korrekt. Import nltk import os

def importalista(cartella): 
    lista=[] 
    listafile=os.listdir(cartella) 
    for file in listafile: 
     f=open(cartella + file, 'r+') 
     lista.append(f.read()) 
     f.close() 

    return lista 

spam = importalista('C:\\enron1\\spam\\') 
ham = importalista('C:\\enron1\\ham\\') 
print(len(spam)) 
+0

Vielen Dank für Ihre Antwort .. Also, wo sollte ich die Rückleitung setzen? –

+0

Vielen Dank für Ihre Antwort .. Also, wo sollte ich die Rückleitung setzen? –

+0

Ok ich gemacht, aber, es gibt mir diesen Fehler –

Verwandte Themen