Seite 1 von 1

Dateinamen in Ordnern auslesen

Verfasst: Montag 10. Juli 2006, 16:35
von TofuSalat
Hi leute,
ist vllt ne rech n00bige frage aber ich hab ka wie ich das machen soll!
Ich möchte von einem beliebigen Ordner\Verzeichnis alle dateinamen auslesen und diese in einer liste speichern. das problem ist: Wie lese ich dateinamen aus? habt ihr da irgendwie nen anhaltspunkt für mich? ich erwarte ja keine fertige lösung ;) nur bissel hilfe...

Verfasst: Montag 10. Juli 2006, 17:08
von DatenMetzgerX
mit unterordner oder ohne?

Verfasst: Montag 10. Juli 2006, 17:50
von jens

Verfasst: Montag 10. Juli 2006, 18:00
von Masaru
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.

Code: Alles auswählen

>>> import os
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<<

Verfasst: Montag 10. Juli 2006, 18:11
von TofuSalat
ah danke leute ich werds mal ausprobieren!

Verfasst: Montag 10. Juli 2006, 18:52
von gerold
jens hat geschrieben:os.listdir()
os.walk()
Hi!

Zu dieser Liste würde ich noch glob() dazu schmeißen.

glob.glob() -- http://docs.python.org/lib/module-glob.html

Code: Alles auswählen

>>> from glob import glob
>>> glob(r"C:\_Ablage\*")
['C:\\_Ablage\\check_spool', 'C:\\_Ablage\\docutils', 
'C:\\_Ablage\\home_sw3', 'C:\\_Ablage\\home_sw3.html', 
'C:\\_Ablage\\mini_ajax', 'C:\\_Ablage\\roter_faden.txt']
>>>


lg
Gerold
:-)