Seite 1 von 1

verzeichnisnamen und python - versthe die welt gerade nicht.

Verfasst: Samstag 4. Oktober 2008, 13:17
von borgus
Hallo Leute!
Wollte mal wieder etwas mit python rumspielen und verzeichnisse auslesen
und testen, ob die dinge, die ich in verzeichnissen finde verzeichnisse oder
dateien sind.

ich dachte ich hätte verstanden, wie python pfade haben möchte, aber
irgendwie bin ich nun total durcheinander.
kann mir jemand kurz erklären, wann ich in python nun

/mein_unterstes/verzeichnis/spam/eggs/bla.eggs

benutze und wann
'
C:\foobar\etc\pp.eggse ??

z.B. will doch open() die erste variante haben, aber
os.path.listdir() liefert mir z.B. die zweite Variante zurück.

wie konvertiere ich mir dir pfade so, dass ich sie benutzen kann?
sorry, ziemlich allgemeine frage....aber immer, wenn ich denke, ich hab's
verstanden, dann funzt es wieder nicht.

ACHJA:
wenn ich verzeichnisse mit os.path.listdir() auslese und danach
für jeden eintrag prüfe, ob's ein verzeichnis oder datei ist, liefern
mir os.path.isdir() oder os.path.isfile() immer false zurück egal, ob
ich sie in einen absoluten pfad umwandle oder nicht.

Ihr ahnt es, ich bin total verwirrt....bringt bitte Licht in mein Dunkel! :o)

danke!

Verfasst: Samstag 4. Oktober 2008, 13:25
von Hyperion
Das eine ist eben die Unix-Notation, das andere die Windows-Notation. Um Plattform unabhängig zu coden, gibt es in os.path zig nützliche Funktionen. Vor allem join() wäre hier zu empfehlen.

Zum zweiten Probelm: Poste doch mal genau Deinen Code hier. Kann mir im Moment nur vorstellen, dass Dein Pfad schlicht falsch ist und sich dort eben keine Datei oder Verzeichnis befindet.

Code: Alles auswählen

>>> isfile("test")
False
"test" gibt es bei mir dort definitiv nicht.

Verfasst: Samstag 4. Oktober 2008, 14:39
von BlackJack
@borgus: Python ist das alles herzlich egal weil die Zeichenketten einfach an das Betriebssystem weiter gegeben werden. Und die Windows-API erlaubt eigentlich immer beide Arten von Schrägstrichen.

`os.path.listdir()` gibt's gar nicht, Du meintest vielleicht `os.listdir()`!?

Das liefert gar keine Pfade, sondern nur Dateinamen. Wenn Du daraus einen absoluten Pfad machen willst, zum Beispiel mit `os.path.abspath()` musst Du natürlich noch den Pfad davor hängen, den Du bei `os.listdir()` als Argument übergeben hast. Woher sollte die Funktion sonst auch wissen in welchem Verzeichnis die Datei mit dem Namen liegt!?

Verfasst: Samstag 4. Oktober 2008, 18:19
von borgus
Hi! Danke schonmal für eure Antworten!
Hier ist ein beispielcode, wie ich's mir denke, dass es funzen sollte:

Code: Alles auswählen

import os.path
import os

for i in os.listdir('c:\python25'):
    i = os.path.abspath(i)
    if os.path.isdir(i):
        print i, ' is a dir'
    else:   print i, ' was anderes'
    
Das Ergebnis ist:
C:\DLLs was anderes
C:\Doc was anderes
C:\include was anderes
C:\Lib was anderes
C:\libs was anderes
C:\LICENSE.txt was anderes
C:\NEWS.txt was anderes
C:\PIL-wininst.log was anderes
C:\python.exe was anderes
C:\pythonw.exe was anderes
C:\README.txt was anderes
C:\RemovePIL.exe was anderes
C:\Scripts was anderes
C:\tcl was anderes
C:\Tools was anderes
C:\w9xpopen.exe was anderes
[/quote]

@BlackJack sorry, war ein Tippfehler..
Was meint ihr dazu?

Verfasst: Samstag 4. Oktober 2008, 19:10
von Hyperion
Schau Dir doch Dein Ergebnis an! Da siehst Du doch schon, dass da was am Pfad noch nicht stimmt!

Verfasst: Samstag 4. Oktober 2008, 19:10
von BlackJack
Dazu meine ich Du solltest nochmal lesen was ich und Hyperion geschrieben haben und ein wenig überlegen vielleicht. Alleine die Pfade, die ausgegeben werden, hätten Dich schon mal überlegen lassen sollen.

Verfasst: Samstag 4. Oktober 2008, 21:35
von borgus
mir fällt's gerade wie schuppen von den augen - peinlich
danke an euch