Die Überschrift sagt schon alles: ich kann keine Dateien mit open() öffnen.
Gibt es da irgendwo eine Sperre die ich lösen muss? Oder liegt es doch an mir?
Danke Euch
Python3.1: open() -> File not found / Windows
Teilbereiche von Windows-Pfaden werden aufgrund des Backslash nichtJeanZ hat geschrieben:Die Überschrift sagt schon alles: ich kann keine Dateien mit open() öffnen.
selten als Escape-Sequenzen interpretiert.
Zeig doch bitte mal den Aufruf.
Grüße ... Kiffi
Schreib dochmal wie du sie versuchst zu öffnen und denk daran das du auch die nötigen (ich vermute mal) ntfs-rechte auf die Datei hast.
>>> open('C:\\neu.txt')
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
open('C:\\neu.txt')
IOError: [Errno 2] No such file or directory: 'C:\\neu.txt'
>>>
Mit dem Editor lässt sie sich ganz normal bearbeiten.
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
open('C:\\neu.txt')
IOError: [Errno 2] No such file or directory: 'C:\\neu.txt'
>>>
Mit dem Editor lässt sie sich ganz normal bearbeiten.
Ich denke man muss (oder sollte?) dem `open()` eine Variable zuweisen. Und vielleicht musst du als Datei das hier angeben:JeanZ hat geschrieben:>>> open('C:\\neu.txt')
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
open('C:\\neu.txt')
IOError: [Errno 2] No such file or directory: 'C:\\neu.txt'
>>>
Mit dem Editor lässt sie sich ganz normal bearbeiten.
C:\\\\neu.text
Ich meine, normalerweise sind es zwei Backslashs, und die muss man ja maskieren. Aber wahrscheinlich irre ich mich
EDIT: Ich meine, normalerweise ist es doch so:
C:\\irgend\ein\pfad\zu\einer\datei.txt
Oder nicht?
nomnom, du hast völlig recht, entweder nutzt man / oder immer einen doppelten \\, welcher als ein \ gewertet wird.
Da \ immer eine Escapesequenz einleitet und nicht im String gewertet wird, also ist in dem Fall \\\\ völlig richtig.
Wenn du den Pfad also so angibst muss du es so machen:
C:\\\\irgend\\ein\\pfad\\zu\\einer\\datei.txt
Da \ immer eine Escapesequenz einleitet und nicht im String gewertet wird, also ist in dem Fall \\\\ völlig richtig.
Wenn du den Pfad also so angibst muss du es so machen:
C:\\\\irgend\\ein\\pfad\\zu\\einer\\datei.txt
Das bezweifle ich aber, denn bei mir geht folgendes:Xynon1 hat geschrieben:nomnom, du hast völlig recht, entweder nutzt man / oder immer einen doppelten \\, welcher als ein \ gewertet wird.
Da \ immer eine Escapesequenz einleitet und nicht im String gewertet wird, also ist in dem Fall \\\\ völlig richtig.
Code: Alles auswählen
Python 2.6.5 (r265:79096, Mar 19 2010, 21:48:26) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> open('C:\\eula.1028.txt')
<open file 'C:\eula.1028.txt', mode 'r' at 0x023C0C28>
Code: Alles auswählen
>>> open('C:\\\\eula.1028.txt')
<open file 'C:\\eula.1028.txt', mode 'r' at 0x023C0AC8>
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
`\e` ist eben keine Escape-Sequenz, insofern hat Xynon1 unrecht, denn nicht alle Sequenzen, die mit `\` anfangen, sind Escape-Sequenzen, `\n` aber sehr wohl.DaMutz hat geschrieben:Das bezweifle ich aber, denn bei mir geht folgendesXynon1 hat geschrieben:nomnom, du hast völlig recht, entweder nutzt man / oder immer einen doppelten \\, welcher als ein \ gewertet wird.
Da \ immer eine Escapesequenz einleitet und nicht im String gewertet wird, also ist in dem Fall \\\\ völlig richtig.
Ich werfe mal Raw-Strings in die Runde, mit denen man das Problem einfach umschifft:
Code: Alles auswählen
>>> r"C:\\neu"
'C:\\\\neu'
Zuletzt geändert von cofi am Mittwoch 17. November 2010, 19:31, insgesamt 1-mal geändert.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Hier (in diesem Thread) steht nirgends Code, welcher von einer Python-Version abhängig ist.Xynon1 hat geschrieben:Hast du das auch nochmal in Python 3.1 ?
Ich kann das für Windows leider nicht testen.
Das Leben ist wie ein Tennisball.
Bezog sich noch auf DaMutz Beispiel,
Ich dachte Strings sind in Python 3 nun unicode Objekte, insofern ist das doch etwas anders, oder ?
Ich dachte Strings sind in Python 3 nun unicode Objekte, insofern ist das doch etwas anders, oder ?
ich habe nur Python 2.6 installiert. Die raw-String Version ist aber sicher die Beste. Dateien öffne ich eigentlich immer damit (und natürlich mit dem 'with'). Es hat mich auch erstaunt, dass meine Version funktioniert, aber jetzt mit cofi's Erklärung ist es klar
Wenn ich eine Datei neu anlege und beschreibe ist das Öffnen kein Problem:
>>> f = open('neu1.txt', 'w')
>>> f.write('hallo')
5
>>> f.close()
>>> f = open('neu1.txt')
>>> print(f.read())
hallo
>>>
Gibt es da ein Rechtsproblem?
>>> f = open('neu1.txt', 'w')
>>> f.write('hallo')
5
>>> f.close()
>>> f = open('neu1.txt')
>>> print(f.read())
hallo
>>>
Gibt es da ein Rechtsproblem?