Seite 1 von 1

os.walk -> Pfadangabe: hier

Verfasst: Mittwoch 18. März 2009, 11:09
von christine
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

Verfasst: Mittwoch 18. März 2009, 11:10
von Leonidas
Was meinst du mit "hier": den aktuellen Pfad in dem sich der User befindet oder den Ordner in dem das Skript liegt?

Verfasst: Mittwoch 18. März 2009, 11:35
von christine
Hallo,

ich meine mit hier den Ordner in dem sich das Skript befindet

Verfasst: Mittwoch 18. März 2009, 11:38
von keppla
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

Verfasst: Mittwoch 18. März 2009, 11:45
von Pekh
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.

Verfasst: Mittwoch 18. März 2009, 11:46
von Leonidas
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.

Verfasst: Mittwoch 18. März 2009, 12:01
von querdenker
....gelöscht weil mal wieder nicht richtig gelesen....

Verfasst: Mittwoch 18. März 2009, 12:02
von helduel
querdenker hat geschrieben:Mein HomeDir erreiche ich unter unixoiden OS doch mit "cd ~", das aktuelle Verzeichnis wird mit "." angesprochen
Homedir != aktuelles Verzeichnis des Users

Verfasst: Mittwoch 18. März 2009, 12:57
von christine
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

Verfasst: Mittwoch 18. März 2009, 14:33
von derdon
Was spricht gegen __file__? Dann muss das sys-Modul nicht evtl. nicht importiert werden.

Verfasst: Mittwoch 18. März 2009, 14:35
von Leonidas
Das macht aus der Sicht gesehen keinen Unterschied, denn das ``sys``-Modul ist so oder so immer importiert.

Verfasst: Mittwoch 18. März 2009, 14:53
von keppla
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.

Verfasst: Mittwoch 18. März 2009, 23:37
von 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. :-)