Dateien lesen u. schreiben aus anderen Verzeichnis

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
Benutzeravatar
merovinger
User
Beiträge: 11
Registriert: Sonntag 2. April 2023, 10:35

Hallo Leute.

Ich bin gerade dabei mir Python anzueignen.
Aktuell bleibe ich hängen bei dem Problem Dateien aus einen anderen Verzeichnis einzulesen bzw. darin zu schreiben.
Ich verwende PyCharm.
Aktuell bin ich auch ein wenig verwirrt. Wenn ich die offizielle schreibweise nutze (W3) meckert PyCharm wenn ich es ändere geht es. Siehe unten. Ich dachte es gibt nur eine richtige Syntax!?

1. Wie wird jetzt korrekterweise eine Datei aus einem anderen Verzeichnis geholt ?
2. Wie ist die richtige Syntax wenn Dateien gelesen/beschrieben werden sollen ?

Das funktioniert: file = open(r"D:\IT\Python lernen\XXX\CCCC\VVVV\schreiben.txt")
Das funktioniert nicht: file = open(w"D:\IT\Python lernen\XXX\CCCC\VVVV\schreiben.txt")
Das funktioniert nicht: file = open("D:\IT\Python lernen\XXX\CCCC\VVVV\schreiben.txt", "w")


Danke schon mal für das Feedback.
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Und die Fehlermeldung zu "funkioniert nicht" lautet?

Und was soll denn ein "w" vor einer Zeichenkette bewirken? Das sollte syntaktisch falsch sein.
Das "r" bedeutet, dass es sich um einen "Raw String" handelt:

Code: Alles auswählen

>>> r"\Test"
'\\Test'
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wir haben das hier tausend mal besprochen. Such mal nach Windows, Pfad, backslash, escape.
Benutzeravatar
merovinger
User
Beiträge: 11
Registriert: Sonntag 2. April 2023, 10:35

Nein nix gefunden Backslash-Kram.
Da man hier keine Screenshots reinpasten kann, einmal den Code und ie Ausgabe.

Code: Alles auswählen

file = open("D:\\Test\01 - Ordner\02 - Ordner\03 - Ordner\schreiben.txt", "r")
print(file.read())
file.close()
file = open("D:\\Test\01 - Ordner\02 - Ordner\03 - Ordner\schreiben.txt", "r")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
OSError: [Errno 22] Invalid argument: 'D:\\Test\x01 - Ordner\x02 - Ordner\x03 - Ordner\\schreiben.txt'
Benutzeravatar
__blackjack__
User
Beiträge: 13116
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@merovinger: Text sollte sowieso als Text gepostet werden und nicht als Bild.

In der Zeichenkette sind drei \ die jeweils einen Bytewert erzeugen der unter Windows nicht in Dateinamen vorkommen darf. Dann zwei Backslashes die *einen* Backslash erzeugen, und eine Kombination die unverändert übernommen wird weil "\s" keine besondere Bedeutung hat. Man sollte auch da den Backslash mit einem Backslash schützen. Oder eben ”raw”-Zeichenkettenliterale verwenden. Was Du im ersten Beitrag ja bereits gemacht hast. Warum nimmst Du nicht einfach die Variante die funktioniert.

Die Details zu Zeichenketten und Escape-Sequenzen stehen in der Python-Dokumentation: https://docs.python.org/3/reference/lex ... -sequences
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

In der Fehlermeldung siehst Du ja schön, in was \01 umgewandelt wird.
Am besten benutzt man als Pfadtrenner immer /.
Dateien öffnet man mit einem with-Statement und gibt das Encoding für Textdateien immer explizit an:

Code: Alles auswählen

with open("D:/Test/01 - Ordner/02 - Ordner/03 - Ordner/schreiben.txt", encoding="utf8") as file:
    print(file.read())
Benutzeravatar
merovinger
User
Beiträge: 11
Registriert: Sonntag 2. April 2023, 10:35

Ich habe gerade mal ein wenig rumgespielt. Wenn ich jeweils doppelte Backslashe einsetze funtkioniert es.

Code: Alles auswählen

file = open("D:\\Test\\01 - Ordner\\02 - Ordner\\03 - Ordner\\schreiben.txt", "r")
print(file.read())
file.close()
Wenn ich das aber auf ein anderes Verzeichnis übertrage geht es nicht.
Gibt es Einschränkungen bei der Pfadlänge ?
Kommt Python mit Leerzeichen in Ordnernamen nicht klar ?
PyCharm sagt mir das das Verzeichnis nicht gefunden wurde.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Und wieder kann man nichts dazu sagen, wenn Du nicht den konkreten Code und die Fehlermeldung dazu postest. Du scheinst halt irgendwas anders zu machen.
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

@merovinger: Entweder ignorierst du absichtlich sämtliche dir gegegeben Hinweise oder du überliest sie. Letzteres wäre aber schon erstaunlich, weil du nun wirklich keinen einzigen übernommen hast. Vielleicht solltest du den Thread noch einmal in Ruhe von oben bis unten lesen.

Und es drängt sich natürlich die Frage auf, wie du darauf kommst, dass Python mit Leerzeichen in Ordnernamen nicht klar kommt, wenn du in dem selben Post ja zeigst, dass es funktioniert.
Antworten