verzeichnisnamen und python - versthe die welt gerade nicht.

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
borgus
User
Beiträge: 11
Registriert: Donnerstag 18. September 2008, 13:08
Wohnort: Bremen

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!
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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.
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!?
borgus
User
Beiträge: 11
Registriert: Donnerstag 18. September 2008, 13:08
Wohnort: Bremen

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?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Schau Dir doch Dein Ergebnis an! Da siehst Du doch schon, dass da was am Pfad noch nicht stimmt!
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.
borgus
User
Beiträge: 11
Registriert: Donnerstag 18. September 2008, 13:08
Wohnort: Bremen

mir fällt's gerade wie schuppen von den augen - peinlich
danke an euch
Antworten