Dateien suchen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Unique84
User
Beiträge: 6
Registriert: Samstag 1. September 2007, 18:48

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?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Unique84
User
Beiträge: 6
Registriert: Samstag 1. September 2007, 18:48

Genau das was ich gebraucht habe.

Vielen Dank
Markus12
User
Beiträge: 195
Registriert: Dienstag 6. März 2007, 19:32
Wohnort: Frankfurt am Main

Ich würde es mit einer rekursiven Funktion machen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

`os.walk` funktioniert bereits so wie ich weiß rekursiv.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten