Textdatei im Netzwerk speichern

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
fishtown
User
Beiträge: 9
Registriert: Dienstag 12. März 2013, 18:05

Hallo,
ich möchte gerne eine in Python erstellte Textdatei im Netzwerk abspeichern. In meinem Script habe ich eine Config-Datei und die Hauptdatei.

In der Config-Datei habe ich u.a. den Pfad des Speicherortes angegeben.

Code: Alles auswählen

pfad = "C:\temp"
In der Hauptdatei wird dieser Pfad mit

Code: Alles auswählen

f = open(pfad,"w")
aufgerufen. Was auch klappt.

Nun hat sich aber der Pfad dahingehend geändert, das nicht mehr lokal, sondern im Netzwerk gespeichert werden soll.
Der neue Pfad ist:

Code: Alles auswählen

\\homework\test
Ändere ich aber in der Config-Datei den Pfad, dann kommt eine Fehlermeldung (Ordner oder Datei existiert nicht).

Hat Python ein Problem mit einer solchen Zieladresse?

Wie kann ich es realisieren? Die Möglichkeit die Zieladresse als Netzlaufwerk einzubinden scheidet aus.

Grüße
Jan
BlackJack

@fishtown: Auch das erste wird nicht klappen, denn:

Code: Alles auswählen

In [34]: pfad = "C:\temp"

In [35]: print pfad
C:      emp
'\t' ist *ein* Zeichen, nämlich das Tabulatorzeichen. Du musst entweder '\\' schreiben wenn Du *einen* Backslash meinst, oder ein ”rohes” Zeichenkettenliteral in den Quelltext schreiben damit die Escape-Sequenzen nicht vom Compiler interpretiert werden:

Code: Alles auswählen

In [36]: pfad = "C:\\temp"

In [37]: print pfad
C:\temp

In [38]: pfad = r"C:\temp"

In [39]: print pfad
C:\temp
fishtown
User
Beiträge: 9
Registriert: Dienstag 12. März 2013, 18:05

OK, Schreibfehler.

Aber was ist mit dem Netzwerkpfad? (\\) Dieser Pfad existiert auch.
BlackJack

@fishtown: Ja was ist mit dem Netzwerkpfad? Wie gibst Du den im Quelltext an? Das was ich für den ersten Pfad geschrieben habe gilt für alle literalen Zeichenketten in Python.
fishtown
User
Beiträge: 9
Registriert: Dienstag 12. März 2013, 18:05

Sorry, es ist Freitag, harte Woche und ich bin über 45...

Also wäre richtig:

Code: Alles auswählen

f = open(r + pfad,"w")
Hab ich das richtig verstanden?

Oder wäre:

Code: Alles auswählen

pfad = r"\\homework\test"
besser?
Sirius3
User
Beiträge: 17746
Registriert: Sonntag 21. Oktober 2012, 17:20

@fishtown: was ist `r` in `r+path`?
Der Doppelbackslash in `pfad` wird zu einem einfachen, genauso wie `\t` zu einem Tabzeichen wird. Daher mußt Du wie bei Deiner zweiten Codezeile ein r vor das Anführungszeichen des Strings setzen:

Code: Alles auswählen

print "\\homework\test"   # \homework       est
print r"\\homework\test"  # \\homework\test
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

fishtown hat geschrieben:

Code: Alles auswählen

f = open(r + pfad,"w")
Hab ich das richtig verstanden?
Nein, hast du nicht. Dir ist immer noch nicht klar, wofür das r da ist.

Wenn du in deinem Code einen String angibst, dann kannst du das z.B. wie folgt tun: "name", 'name' oder auch """name""". Möchtest du jetzt beispielsweise an erster Stelle einen Backslash haben, so könnte man sich als Lösung "\name" vorstellen. Das ergibt allerdings nicht das Gewünschte, da der Backslash ein Escape-Zeichen ist und damit dem folgenden Zeichen eine besondere Bedeutung verleiht (sofern eine definiert ist). Ein "\n" wird zu einem Zeilenumbruch, so dass der String im Endeffekt das Symbol für den Zeilenumbruch gefolgt von "ame" enthält. Wenn du das Escape-Zeichen selber escapest dann erhältst du das Zeichen selber. Im Code würdest du also den String als "\\name" angeben um \name als Ergebnis zu bekommen.

Gibt man einen String im Code als Raw-String an, so verliert das Escape-Zeichen seine Sonderbedeutung. Um einen Raw-String zu definieren musst du dem einleitenden Anführungszeichen ein r voranstellen. Das sieht dann so aus r"\name" und ergibt dann auch \name als Ergebnis. Dieses führende r ist keine Variable oder Teil des Strings, es ist nur Teil der Python-Syntax.


BTW, es ist Freitag, harte Woche und ich bin über 50...
Antworten