2016-04-12 10 views
0

Ich lerne Python und möchte rekursiv nach einem Schlüsselwort in mehreren Dateien suchen.Python findet eine Zeichenfolge in mehreren Dateien rekursiv und gibt den Dateipfad zurück

Ich habe eine Beispielfunktion, die die *.doc Erweiterung in einem Verzeichnis finden sollte. Dann sollte die Funktion jede Datei mit dieser Dateierweiterung öffnen und lesen. Wenn ein Schlüsselwort beim Lesen der Datei gefunden wird, sollte die Funktion den Dateipfad identifizieren und drucken.

Andernfalls, wenn das Schlüsselwort nicht gefunden wird, sollte Python fortgesetzt werden.

, das zu tun, ich habe eine Funktion definiert, die zwei Argumente nimmt:

def find_word(extension, word): 
     # define the path for os.walk 
     for dname, dirs, files in os.walk('/rootFolder'): 
      #search for file name in files: 
      for fname in files: 
        #define the path of each file 
        fpath = os.path.join(dname, fname) 
        #open each file and read it 
        with open(fpath) as f: 
         data=f.read() 
        # if data contains the word 
        if word in data: 
         #print the file path of that file 
         print (fpath) 
        else: 
         continue 

Könnten Sie mir geben eine Hand diesen Code zu beheben?

Danke,

+0

könnten Sie uns geben, eine Eingabe und eine Ausgabe, was Sie erwarten und wo der Code fehlschlägt? – Whitefret

Antwort

1

.doc Dateien sind Rich-Text-Dateien, das heißt, sie mit einem einfachen Texteditor oder Python offener Methode offen gewohnt. In diesem Fall können Sie andere Python-Module wie python-docx verwenden.

aktualisieren

Für doc-Dateien (iV zu Word 2007) können Sie auch andere Werkzeuge wie catdoc oder antiword verwenden. Versuche Folgendes.

+0

Danke für Ihre Antwort. Python-docx funktioniert hervorragend mit .docx-Dateien, aber ich kann nicht mit .doc-Dateien arbeiten. Irgendein Vorschlag? Vielen Dank! –

+0

Ich habe die Antwort aktualisiert. Ich hoffe es hilft. – Xiflado

1
def find_word(extension, word): 
    for root, dirs, files in os.walk('/DOC'): 
     # filter files for given extension: 
     files = [fi for fi in files if fi.endswith(".{ext}".format(ext=extension))] 
     for filename in files: 
      path = os.path.join(root, filename) 
      # open each file and read it 
      with open(path) as f: 
       # split() will create list of words and set will 
       # create list of unique words 
       words = set(f.read().split()) 
       if word in words: 
        print(path)