Dateinamen in Ordnern auslesen

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.
TofuSalat
User
Beiträge: 7
Registriert: Montag 10. Juli 2006, 16:32

Dateinamen in Ordnern auslesen

Beitragvon TofuSalat » Montag 10. Juli 2006, 16:35

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...
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

Beitragvon DatenMetzgerX » Montag 10. Juli 2006, 17:08

mit unterordner oder ohne?
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Montag 10. Juli 2006, 17:50


CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Beitragvon Masaru » Montag 10. Juli 2006, 18:00

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<<
Zuletzt geändert von Masaru am Dienstag 11. Juli 2006, 09:20, insgesamt 1-mal geändert.
TofuSalat
User
Beiträge: 7
Registriert: Montag 10. Juli 2006, 16:32

Beitragvon TofuSalat » Montag 10. Juli 2006, 18:11

ah danke leute ich werds mal ausprobieren!
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Montag 10. Juli 2006, 18:52

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.

Wer ist online?

Mitglieder in diesem Forum: __deets__, Sirius3, WhiteyW