2011-01-10 9 views
0

Hey da. Ich benutze glob.glob Funktion, um eine Liste aller .TXT-Dateien auf einem Pfad zu erhalten, den ich zur Verfügung stelle. Die Regex Ich füttere die Funktion als C:\build\*.txt, aber es funktioniert nur für das Stammverzeichnis, und ich würde gerne alle Textdateien in c: \ Build \, auch c:\build\files\ha.txt zum Beispiel finden.Wie finde ich alle Textdateien mit Regex?

Wie ist es möglich? Danke.

+0

möglich Duplikat von [Verwenden Sie eine Glob(), um Dateien in Python rekursiv zu finden?] (Http://stackoverflow.com/questions/2186525/use-a-glob-to-find-files-recursively-in-python) – marcog

Antwort

5

Beachten Sie, dass glob.glob wird Unix-Shell Wildcards akzeptieren und nicht regex Objekte (siehe documentation).

Sie könnten die Leistung aller .txt Dateien aus allen Unterverzeichnissen mit os.walk erreichen. Verfahren Sie eine solche Liste geben könnte so etwas wie dieses:

def get_all_txts_on_dir(path): 
    import os 
    ret = [] 
    for root, dir, files in os.walk(path): 
     for name in files: 
      if name.endswith('.txt'): 
       ret.append(name) 
    return ret 
+0

+1: Schneller und detaillierter als ich – unholysampler

+0

Sehr hilfreich, danke. – ldog

2

\.txt$

$ Anker bis zum Ende des Strings

\. entgeht eine wörtliche .

+0

Sie schlagen mich bis zum Schlag. +1 – Anders

+0

-1 'glob' nimmt keine regulären Ausdrücke. – marcog

+0

@Anders - Ich habe es gemerkt :) –

0

glob nicht reguläre Ausdrücke verwenden, hat es eine viel einfachere Vorschriften.

Eine Alternative wäre, os.walk() zu verwenden und den Titel durchzuführen, der mit einem regulären Ausdruck übereinstimmt.