it-swarm.com.de

open () in Python erstellt keine Datei, wenn diese nicht vorhanden ist

Was ist der beste Weg, um eine Datei als Lese-/Schreibzugriff zu öffnen, wenn sie existiert oder nicht, dann erstellen Sie sie und öffnen Sie sie als Lese-/Schreibzugriff. Nach dem, was ich gelesen habe, sollte file = open('myfile.dat', 'rw') dies tun, richtig?

Es funktioniert nicht für mich (Python 2.6.2) und ich frage mich, ob es ein Versionsproblem ist oder nicht so oder so funktionieren soll.

Unter dem Strich brauche ich nur eine Lösung für das Problem. Ich bin neugierig auf die anderen Sachen, aber alles, was ich brauche, ist eine schöne Art und Weise, den ersten Teil zu erledigen.

UPDATE: Das umschließende Verzeichnis war nach Benutzer und Gruppe beschreibbar, nicht von anderen (ich bin auf einem Linux-System ... also Berechtigungen 775), und der genaue Fehler war

IOError: keine solche Datei oder Verzeichnis.

529
trh178

Sie sollten open mit dem w+-Modus verwenden:

file = open('myfile.dat', 'w+')
688
muksie

Der folgende Ansatz hat den Vorteil, dass die Datei am Ende des Blocks richtig geschlossen ist, auch wenn eine Ausnahme ausgelöst wird. Es ist äquivalent zu try-finally, aber viel kürzer.

with open("file.dat","a+") as f:
    f.write(...)
    ...

a + Öffnet eine Datei zum Anhängen und Lesen. Der Dateizeiger lautet am Ende der Datei, wenn die Datei vorhanden ist. Die Datei wird in der .__ geöffnet. Modus anhängen. Wenn die Datei nicht vorhanden ist, wird eine neue Datei für .__ erstellt. lesen und Schreiben. - Python-Dateimodi

seek () - Methode Legt die aktuelle Position der Datei fest.

f.seek(pos [, (0|1|2)])
pos .. position of the r/w pointer
[] .. optionally
() .. one of ->
  0 .. absolute position
  1 .. relative position to current
  2 .. relative position from end

Nur "rwab +" Zeichen sind erlaubt. es muss genau einen von "rwa" geben - siehe Stack Overflow-Frage Python-Dateimodi Detail.

109
Qwerty
>>> import os
>>> if os.path.exists("myfile.dat"):
...     f = file("myfile.dat", "r+")
... else:
...     f = file("myfile.dat", "w")

r + bedeutet Lesen/Schreiben

32
Khorkrak

Es ist empfehlenswert, Folgendes zu verwenden:

import os

writepath = 'some/path/to/file.txt'

mode = 'a' if os.path.exists(writepath) else 'w'
with open(writepath, mode) as f:
    f.write('Hello, world!\n')
31
lollercoaster

Ändern Sie "rw" in "w +"

Oder benutze 'a +' zum Anhängen

26
baloo

Meine Antwort:

file_path = 'myfile.dat'
try:
    fp = open(file_path)
except IOError:
    # If not exists, create the file
    fp = open(file_path, 'w+')
14
Chien-Wei Huang

open('myfile.dat', 'a') funktioniert für mich, einfach gut.

in py3k wirft Ihr Code ValueError auf:

>>> open('myfile.dat', 'rw')
Traceback (most recent call last):
  File "<pyshell#34>", line 1, in <module>
    open('myfile.dat', 'rw')
ValueError: must have exactly one of read/write/append mode

in Python-2.6 wird IOError ausgelöst.

7
SilentGhost

Ich denke es ist r + , nicht rw . Ich bin nur ein Starter, und das habe ich in der Dokumentation gesehen.

6
Angel Poppy

Was willst du mit Datei machen? Nur schreiben oder lesen und schreiben?

'w', 'a' erlaubt das Schreiben und erstellt die Datei, falls sie nicht existiert.

Wenn Sie aus einer Datei lesen müssen, muss die Datei vorhanden sein, bevor Sie sie öffnen können. Sie können die Existenz vor dem Öffnen testen oder einen Try/Exceptor verwenden.

6
user49117

Setzen Sie w +, um die Datei zu schreiben, abzuschneiden, falls vorhanden, r +, um die Datei zu lesen. Erstellen Sie eine Datei, wenn sie nicht vorhanden ist, aber nicht schreiben (und null zurückgeben) oder ein +, um eine neue Datei zu erstellen oder an eine vorhandene anzuhängen.

5
Gustavo6046
'''
w  write mode
r  read mode
a  append mode

w+  create file if it doesn't exist and open it in write mode
r+  create file if it doesn't exist and open it in read mode
a+  create file if it doesn't exist and open it in append mode
'''

beispiel:

file_name = 'my_file.txt'
f = open(file_name, 'w+')  # open file in write mode
f.write('python rules')
f.close()

Ich hoffe das hilft. [FYI verwende Python-Version 3.6.2

5
Gajendra D Ambi

Seit Python 3.4 verwenden Sie solltepathlib, um Dateien zu "berühren".
Es ist eine viel elegantere Lösung als die in diesem Thread vorgeschlagenen.

from pathlib import Path

filename = Path('myfile.txt')
filename.touch(exist_ok=True)  # will create file, if it exists will do nothing
file = open(filename)

Gleiches gilt für Verzeichnisse:

filename.mkdir(parents=True, exist_ok=True)
5
Granitosaurus

Wenn Sie es zum Lesen und Schreiben öffnen möchten, gehe ich davon aus, dass Sie es beim Öffnen nicht abschneiden möchten und Sie die Datei direkt nach dem Öffnen lesen können. Das ist also die Lösung, die ich verwende:

file = open('myfile.dat', 'a+')
file.seek(0, 0)

Benutzen:

import os

f_loc = r"C:\Users\Russell\Desktop\ip_addr.txt"

if not os.path.exists(f_loc):
    open(f_loc, 'w').close()

with open(f_loc) as f:
    #Do stuff

Stellen Sie sicher, dass Sie die Dateien schließen, nachdem Sie sie geöffnet haben. Der Kontextmanager with erledigt dies für Sie.

4
Mr. Me
import os, platform
os.chdir('c:\\Users\\MS\\Desktop')

try :
    file = open("Learn Python.txt","a")
    print('this file is exist')
except:
    print('this file is not exist')
file.write('\n''Hello Ashok')

fhead = open('Learn Python.txt')

for line in fhead:

    words = line.split()
print(words)
1
Ganesh Jat

Sie möchten also Daten in eine Datei schreiben, aber nur, wenn sie noch nicht vorhanden sind?.

Dieses Problem lässt sich leicht lösen, indem Sie den wenig bekannten x-Modus anstelle des üblichen w-Modus verwenden. Zum Beispiel:

 >>> with open('somefile', 'wt') as f:
 ...     f.write('Hello\n')
...
>>> with open('somefile', 'xt') as f:
...     f.write('Hello\n')
...
 Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
FileExistsError: [Errno 17] File exists: 'somefile'
  >>>

Wenn die Datei im Binärmodus ist, verwenden Sie den Modus xb anstelle von xt.

0
njoshsn