open () en Python no crea un archivo si no existe


Answers

La ventaja del siguiente enfoque es que el archivo se cierra correctamente al final del bloque, incluso si se produce una excepción en el camino. Es equivalente a try-finally , pero mucho más corto.

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

a + Abre un archivo para adjuntar y leer. El puntero del archivo se encuentra al final del archivo si el archivo existe. El archivo se abre en el modo de agregar. Si el archivo no existe, crea un nuevo archivo para leer y escribir. - Modos de archivos de Python

El método seek () establece la posición actual del archivo.

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

Solo se permiten caracteres "rwab +"; debe haber exactamente uno de "rwa" - ver la pregunta sobre desbordamiento de pila, detalles de los modos de archivo de Python .

Question

¿Cuál es la mejor manera de abrir un archivo como de lectura / escritura si existe, o si no lo tiene, luego crearlo y abrirlo como de lectura / escritura? Por lo que he leído, file = open('myfile.dat', 'rw') debería hacer esto, ¿no?

No funciona para mí (Python 2.6.2) y me pregunto si es un problema de versión, o no debería funcionar así o qué.

En resumidas cuentas, solo necesito una solución para el problema. Tengo curiosidad sobre las otras cosas, pero todo lo que necesito es una buena manera de hacer la parte de apertura.

ACTUALIZACIÓN: el directorio adjunto era escribible por usuario y grupo, no por otro (estoy en un sistema Linux ... así que los permisos 775 en otras palabras), y el error exacto fue:

IOError: no existe tal archivo o directorio.




Entonces, ¿desea escribir datos en un archivo, pero solo si aún no existe ?.

Este problema se resuelve fácilmente utilizando el poco conocido modo x para abrir () en lugar del habitual modo w. Por ejemplo:

 >>> 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'
  >>>

Si el archivo es en modo binario, use el modo xb en lugar de xt.




Ponga w + para escribir el archivo, truncando si existe, r + para leer el archivo, creando uno si no existe pero no escribe (y devuelve nulo) o a + para crear un nuevo archivo o agregarlo a uno existente.




'''
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
'''

ejemplo:

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

Espero que esto ayude. [FYI estoy usando Python versión 3.6.2




Creo que es r + , no rw . Solo soy un principiante, y eso es lo que he visto en la documentación.




Mi respuesta:

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



Una buena práctica es usar lo siguiente:

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')