2016-05-18 20 views
1

Ich möchte also jede Datei in einem Verzeichnis öffnen (in diesem Verzeichnis befinden sich 4 einfache Textdokumente). Und machen Sie so etwas wie das Finden bestimmter Wörter und deren Anzahl in jeder Datei.Öffnen von Dateien aus os.listdir() und Ausführen von Aufgaben in Dateien

Dies ist Code, den ich verwendet habe, aber ich habe Fehler von keiner solchen Datei oder Verzeichnis, aber ich, wenn ich den Pfad drucken, zeigt es deutlich den Namen jeder Datei.

import re 
import os 

path = 'C:\\Python27\\projects\\Alabama\\New folder' 

pattern = re.compile(r"\bmay not\b",re.IGNORECASE) 
pattern1 = re.compile(r"\bshall\b",re.IGNORECASE) 
pattern2 = re.compile(r"\bmust\b",re.IGNORECASE) 
pattern3 = re.compile(r"\bprohibited\b",re.IGNORECASE) 
pattern4 = re.compile(r"\brequired\b",re.IGNORECASE) 

for filenames in os.listdir(path): 
with open(filenames) as myfile: 
    total = 0 
    total1 = 0 
    total2 = 0 
    total3 = 0 
    total4 = 0 
    for line in myfile: 
     m = re.findall(pattern, line) 
     m1 = re.findall(pattern1, line) 
     m2 = re.findall(pattern2, line) 
     m3 = re.findall(pattern3, line) 
     m4 = re.findall(pattern4, line) 
     total += len(m) 
     total1 += len(m1) 
     total2 += len(m2) 
     total3 += len(m3) 
     total4 += len(m4) 
    print total, total1, total2, total3, total4 

meine Frage ist: wie die Aufgabe oben erwähnt auszuführen Anzahl von Wort Auftreten von bestimmten Wörtern zu finden („soll“ „must“, usw.) für jede Dokumente separat im Verzeichnis?

+1

Fügen Sie den Pfad vor den Dateinamen in der open-Anweisung hinzu. – selten98

Antwort

3

listdir gibt nur die Dateinamen zurück. Sie müssen den Pfad an die Dateinamen anhängen, um sie zu öffnen.

for filenames in os.listdir(path): 
    with open(os.path.join(path, filenames)) as myfile: 

Was die Worte zählen, haben Sie mehrere Möglichkeiten, je nachdem, wie genau wollen Sie zählen und was Sie definieren ein „Auftreten“ zu sein. Beispielsweise können Sie die gesamte Datei als Zeichenfolge lesen und dann die Methode str.count verwenden, um nur das Auftreten bestimmter Wörter zu zählen.

for filenames in os.listdir(path): 
    with open(os.path.join(path, filenames)) as myfile: 
     content = myfile.read().lower() # to essentially ignore the case 
     shall_count = content.count('shall') 
+0

danke! Ich habe den Rest definitiv hart codiert. – CHballer

+0

Danke für die zusätzliche Erklärung – CHballer