chdir Serverordner

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
Duesselentchen
User
Beiträge: 19
Registriert: Dienstag 15. März 2011, 17:08

Dienstag 15. März 2011, 17:28

Hallo liebe Pythoncommunity,

seit kurzem versuche ich Python zu lernen und bin nun an einem Problem angelangt vondem ich bislang keine Lösung gefunden habe. Meine bisherigen Programmierkenntnisse liegen in einem Semester Java - also nicht sonderlich viel, aber auch kein ganz so blutiger Anfänger mehr.

Nun aber zu meinem Problem:
ich möchte mir die Ordner eines bestimmten Verzeichnisses anzeigen lassen (damit arbeite ich dann später weiter - nur ist genau das mein Problem).
Nun habe ich mit

Code: Alles auswählen

import os
das os-Modul eingebunden
und mir mit

Code: Alles auswählen

os.getcwd()
mein aktuelles Verzeichnis anzeigen lassen.

Nun möchte ich mein Verzeichnis wechseln, was ich mit folgendem Code prinzipiell machen kann:

Code: Alles auswählen

print os.chdir ("verzeichnis")
soweit, sogut.

Gebe ich als "verzeichnis" beispielsweise "C:\Programme\Mozilla Firefox\searchplugins" ein erhalte ich auch keine Fehlermeldung. (ich habe ein Beispiel gesucht, habe nicht vor da wirklich etwas drin zu machen! ;) )
Ändere ich "verzeichnis" hingegen in "\\servername\ordnername\unterodnername\20" erhalte ich folgende Fehlermeldung:

WindowsError: [Error 123] Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch: '\\servername\\ordnername\\unterordnername\x10'

Der Pfad ist aber richtig, also wenn ich ihn in den Explorer eingebe wird er auch aufgelöst und ich kann in den Ordnerstrukturen springen. Warum ändert er aber die Backslashes in Doppelbackslashes und ändert die Zahl meines Ordners von 20 auf x10?

Ich hoffe mir kann jemand helfen - Danke schoneinmal im Vorraus!
Fragen dazu versuche ich natürlich bestmöglichst zu beantworten.

Mit freundlichen Grüßen,
Düsselentchen.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Dienstag 15. März 2011, 18:01

Weil der Backslash (wie in Java auch oder?) ein Escape Zeichen ist:

Lösungen:

a) Escape-Sequenz unterbinden mit dem *r*

Code: Alles auswählen

r"\\servername\ordnername\unterodnername\20"
b) Doppelte Slashes

Code: Alles auswählen

"\\\\servername\\ordnername\\unterodnername\\20"
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
Benutzeravatar
/me
User
Beiträge: 3362
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Dienstag 15. März 2011, 19:56

Duesselentchen hat geschrieben:Nun möchte ich mein Verzeichnis wechseln, was ich mit folgendem Code prinzipiell machen kann:

Code: Alles auswählen

print os.chdir ("verzeichnis")
Ein Hinweis noch: print ist in diesem Kontext sinnlos.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Dienstag 15. März 2011, 20:44

Duesselentchen hat geschrieben:ich möchte mir die Ordner eines bestimmten Verzeichnisses anzeigen lassen
Benutze os.listdir!

Das working directory innerhalb eines Prozesses zu aendern kann unerwuenschte Nebeneffekte haben.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Duesselentchen
User
Beiträge: 19
Registriert: Dienstag 15. März 2011, 17:08

Mittwoch 16. März 2011, 10:52

Zuerst: Ich habe ein Erfolgserlebnis - euch Dreien vielen Dank dafür :)

@ms4py: das war des Rätsels Lösung - was so ein kleines r bewirken kann... Aus Java kenne ich es bislang nicht (was nicht heißt, dass es das da nicht gibt, nur bin ich in Java bisher nicht durch Ordner gesprungen) - aber nun erinnere ich mich daran, dass es das beim Shell-Scripting auch gibt...
Aber lange Rede kurzer Sinn: Vielen Dank!

@/me: ich brauchte nur eine Möglichkeit um Herauszufinden ob es funktioniert - ohne das print sehe ich ja nicht, was er nun konkret anzeigt. Natürlich ist das nicht mein ganzes Programm sondern dient mir nur kurzfristig als Hilfestellung ;)

@Rebecca: ich habe es direkt mal mit dem listdir ausprobiert und es macht genau das, was ich haben wollte (Dankeschön!!!) - und wenn ich im Nachhinein darüber nachdenke macht es auch sehr viel mehr Sinn!
BlackJack

Mittwoch 16. März 2011, 11:03

@Duesselentchen: Konkret wird das ``print`` dort immer `None` ausgeben, denn das ist immer der Rückgabewert von `os.chdir()`. Das erscheint mir auch ein wenig sinnfrei.
Duesselentchen
User
Beiträge: 19
Registriert: Dienstag 15. März 2011, 17:08

Mittwoch 16. März 2011, 11:11

@BlackJack: aber bei der Ausgabe `None` sehe ich, dass alles in Ordnung ist - bei einer roten Fehlermeldung weiß ich dann, das etwas nicht stimmt. Ja, jetzt kann man natürlich sagen, dass ich auch ohne die Ausgabe eine Fehlermeldung erhalten hätte, aber lassen wir das ;)
Mir ist zum gestrigen Zeitpunkt nichts intelligenteres eingefallen - mit dem os.listdir macht das natürlich auch viel mehr Sinn.
Antworten