os.walk -> Pfadangabe: hier

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
christine
User
Beiträge: 31
Registriert: Dienstag 24. Februar 2009, 10:03

Hallo,

ich möchte Dateien mit bestimmten Endungen finden.
Der Nutzer soll das Skript in den zu durchsuchenden Ordner kopieren
und von dort ausführen.

Das Skript soll auch alle Unterordner dieses Ordners durchsuchen.
Ich denke

Code: Alles auswählen

os.walk(pfad)
müsste stimmen.
Leider weiss ich nicht wie man angibt, das der Pfad "hier" ist, also immer da wo sich das Script befindet.

Versucht habe ich folgendes:

Code: Alles auswählen

path = "/"
for f in os.walk(path):
        print f
Da habe ich aber ein endlos rennendes Scipt gehabt :roll:

Danke und Grüße,
Christine
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Was meinst du mit "hier": den aktuellen Pfad in dem sich der User befindet oder den Ordner in dem das Skript liegt?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
christine
User
Beiträge: 31
Registriert: Dienstag 24. Februar 2009, 10:03

Hallo,

ich meine mit hier den Ordner in dem sich das Skript befindet
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Leonidas hat geschrieben:Was meinst du mit "hier": den aktuellen Pfad in dem sich der User befindet oder den Ordner in dem das Skript liegt?
so wie ich
das der Pfad "hier" ist, also immer da wo sich das Script befindet
verstehe, letzteres.
Den Pfad des skripts kann man so ermitteln:

Code: Alles auswählen

import sys
print sys.argv[0]
er ist relativ zum current working directory angegeben. Wie man pfade absolut und relativ macht, findet man hier: http://docs.python.org/library/os.path.html
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Daß er bei "/" ne Weile unterwegs ist, würde mich zumindest unter Linux nicht wundern (=> Wurzelverzeichnis) :D

Was du wolltest, war wahrscheinlich "." .

Aber sauberer und sicherer geht es mit den obengenannten Funktionen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Pekh hat geschrieben:Was du wolltest, war wahrscheinlich "." .
Nein, das wäre ja der aktuelle Ordner des users, nicht da wo das Skript drin liegt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

....gelöscht weil mal wieder nicht richtig gelesen....
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

querdenker hat geschrieben:Mein HomeDir erreiche ich unter unixoiden OS doch mit "cd ~", das aktuelle Verzeichnis wird mit "." angesprochen
Homedir != aktuelles Verzeichnis des Users
christine
User
Beiträge: 31
Registriert: Dienstag 24. Februar 2009, 10:03

Hallo,
aha, dacht ich mir doch das ich hier wieder weiterkomme :-)

sys.argv[0] -> super
"/"-> root; ok dann wundert mich nix mehr :oops:

Danke @all, christine
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Was spricht gegen __file__? Dann muss das sys-Modul nicht evtl. nicht importiert werden.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Das macht aus der Sicht gesehen keinen Unterschied, denn das ``sys``-Modul ist so oder so immer importiert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Der Unterschied zwischen __file__ und sys.argv[0] ist, dass arg[0] auch in anderen Dateien auf das ausgeführte Script zeigt. Solange man nur eine Datei hat, machts keinen Unterschied.
BlackJack

Wobei man da wieder vorsichtig sein muss: `__file__` zeigt auf das aufgerufene Modul während `sys.argv[0]` das enthält was als "nulltes" Argument von *aussen* übergeben wurde. Das kann alles Mögliche sein, zum Beispiel der Ort von einer Verknüpfung auf die Moduldatei oder sogar kompletter Unsinn, wenn jemand mit `exec*()` & Co nicht umgehen konnte. :-)
Antworten