Es gibt da mehrere Ansätze, die dir vielleicht helfen könnten.
Als aller erstes benötigst du für Verzeichnis- und Dateioperationen die in Python mit ausgelieferte
os Bibliothek.
Um allgemein mit Verzeichnissen/Dateien zu arbeiten, sollte man bei Python wissen, dass man unter Windows die Backslahes verdoppeln muss da Python das '\' als erstes Elementes von Steuerungszeichen wie '\n' -> Zeilenumbruch, '\t' -> Tabulator, etc. interpretiert (Bsp: 'c;\\MyDirecotry').
Alternativ kann man auch ein "r" vor die Zeichenkette schreiben (Bsp.: r'c:\MyDirectory', wodurch Python die Umwandlung vornimmt).
Mit folgender Modul-Methode, kannst du den Inhalte eines Verzeichnisses rein 'namentlich' auflisten:
Code: Alles auswählen
>>> ziel = 'c:\\MyDirectory\\work'
>>> inhalt = os.listdir(ziel)
>>> print inhalt
['leider', 'ohne', 'unterscheidung', 'nach.typ', 'da.es', 'nur.str', 'sind']
Du erhälst eine Liste von Zeichenketten (strings), welche du in einer Iteration mit dem jeweiligen ziel-Verzeichnis verknüpfen (
os.path.join(ziel, <listen_element>
)), und auf seinen Typ hin prüfen könntest.
Hierfür liefert
os.path ein paar nützliche Methoden:
Code: Alles auswählen
>>> verzeichnisse = []
>>> dateien = []
>>> for elem in inhalt:
... elem_path = os.path.join(ziel, elem)
... if os.path.isfile(elem_path):
... dateien.append(elem)
... if os.path.isdir(elem_path):
... verzeichnisse.append(elem_path)
>>> print verzeichnisse
['leider', 'ohne', 'unterscheidung', 'sind']
>>> print dateien
['nach.typ', 'da.es', 'nur.str',]
Aber Python wäre nicht Python, wenn es nicht auch weitere Möglichkeiten gäbe, gerade wenn es um die Iteration durch eine hirarisch verschachtelte Verzeichnisbaumstruktur geht:
Code: Alles auswählen
>>> for basisverzeichnis, verzeichnisse, dateien in os.walk(ziel):
... break
>>> print basisverzeichnis
c:\MyDirectory\work
>>> print verzeichnisse
['leider', 'ohne', 'unterscheidung', 'sind']
>>> print dateien
['nach.typ', 'da.es', 'nur.str',]
Der Vorteil am
os.walk() ist neben seine kürze noch dazu, dass die Methode durch alle weiteren drunter liegenden Verzeichnisebenen iteriert, und man so alle Folge-Unterverzeichnisse und Dateien "abarbeiten" kann.
Hierfür bedarf es lediglich der Entferung des "break" Statements aus der For-Schleife (und um die Erweiterung mit der eigenen, gewünschten Funktionalität).
Ideal z.B. für "Sammel-, Such-, Zähl-, Löschungs-, etc.-" Funktionalitäten.
Gruß,
>>Masaru<<