Seite 1 von 1

Dateien suchen

Verfasst: Dienstag 4. Dezember 2007, 15:29
von Unique84
Hallo,

ich weißt, dass Thema wurde schon ein paar mal behandelt, aber ich habe nichts passendes zu meinem Problem gefunden.
Ich möchte nach Dateien suchen, die etwa so außen:
rev2.txt11, rev2.txt66, rev2.txt5, usw...
Mein erster Versuch war:

Code: Alles auswählen

print os.popen('find Pfad/ -name rev2.txt*').readlines()
Funktioniert auf der Konsole ohne Probleme, aber mit dem os.popen Befehl bekomme ich nur eine Zeile als Suchergebnis, obwohl es viel mehr sein müssen.

Als nächstes habe ich es dann mit dem walk Befehl versucht. Das sieht in etwas so aus:

Code: Alles auswählen

def callback(arg, directory, files):
    for file in files:
        trashfiles = os.path.join(directory, file)
    print trashfiles

os.path.walk(TRASHFOLDER, callback, None)
Leider steht in trashfiles nicht die Ausgabe von dem os.path.join(directory, file), bzw eine Liste von Dateipfaden.

Kann mir jemand helfen?

Verfasst: Dienstag 4. Dezember 2007, 19:57
von Leonidas
Das ist ein Fall für Verschachtel-Man!

Code: Alles auswählen

import os, os.path
sum(([os.path.join(dirpath, filename) for filename in filenames if filename.startswith('rev2.txt')] for dirpath, dirnames, filenames in os.walk('.')), [])
Nein, im Ernst, das würde man so nicht schreiben. `os.walk` gibt für jeden Ordner den es Abläuft eine Liste zurück mit dem Pfad zum Ordner, den Ordnern in dem Ordner und den Dateinamen in dem Ordner. Diese Liste laufe ich ab und setze die Dateipfade zusammen, wenn die Datei mit `rev2.txt` beginnt. Am Schluss habe ich eine Liste von Listen, die ich einfach nur noch aufsummiere.

In "normalem" Code würde man so etwas durch zwei verschachtelte `for`-Schleifen lösen.

Verfasst: Mittwoch 5. Dezember 2007, 10:28
von Unique84
Genau das was ich gebraucht habe.

Vielen Dank

Verfasst: Montag 10. Dezember 2007, 18:53
von Markus12
Ich würde es mit einer rekursiven Funktion machen.

Verfasst: Montag 10. Dezember 2007, 19:53
von Leonidas
`os.walk` funktioniert bereits so wie ich weiß rekursiv.