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

os.walk -> Pfadangabe: hier

Beitragvon christine » Mittwoch 18. März 2009, 11:09

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 18. März 2009, 11:10

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

Beitragvon christine » Mittwoch 18. März 2009, 11:35

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

Beitragvon keppla » Mittwoch 18. März 2009, 11:38

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

Beitragvon Pekh » Mittwoch 18. März 2009, 11:45

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.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 18. März 2009, 11:46

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 Modvoice
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

Beitragvon querdenker » Mittwoch 18. März 2009, 12:01

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

Beitragvon helduel » Mittwoch 18. März 2009, 12:02

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

Beitragvon christine » Mittwoch 18. März 2009, 12:57

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

Beitragvon derdon » Mittwoch 18. März 2009, 14:33

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

Beitragvon Leonidas » Mittwoch 18. März 2009, 14:35

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 Modvoice
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Beitragvon keppla » Mittwoch 18. März 2009, 14:53

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

Beitragvon BlackJack » Mittwoch 18. März 2009, 23:37

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. :-)

Wer ist online?

Mitglieder in diesem Forum: __deets__, Bing [Bot]