una txt sobreescribir lista linea leer importar guardar gestion especifica ejercicios dat como binarios archivos archivo python file io

txt - guardar una lista en un archivo python



Confundido por el modo de archivo python "w+" (6)

Aquí hay una lista de los diferentes modos de abrir un archivo:

  • r

    Abre un archivo solo para lectura. El puntero del archivo se coloca al principio del archivo. Este es el modo por defecto.

  • rb

    Abre un archivo para leer solo en formato binario. El puntero del archivo se coloca al principio del archivo. Este es el modo por defecto.

  • r +

    Abre un archivo para leer y escribir. El puntero al archivo estará al principio del archivo.

  • rb +

    Abre un archivo para lectura y escritura en formato binario. El puntero al archivo estará al principio del archivo.

  • w

    Abre un archivo para escribir solo. Sobrescribe el archivo si el archivo existe. Si el archivo no existe, crea un nuevo archivo para escribir.

  • wb

    Abre un archivo para escribir solo en formato binario. Sobrescribe el archivo si el archivo existe. Si el archivo no existe, crea un nuevo archivo para escribir.

  • w +

    Abre un archivo para escribir y leer. Sobrescribe el archivo existente si el archivo existe. Si el archivo no existe, crea un nuevo archivo para leer y escribir.

  • wb +

    Abre un archivo para escribir y leer en formato binario. Sobrescribe el archivo existente si el archivo existe. Si el archivo no existe, crea un nuevo archivo para leer y escribir.

  • un

    Abre un archivo para agregar. El puntero del archivo se encuentra al final del archivo si el archivo existe. Es decir, el archivo está en el modo de agregar. Si el archivo no existe, crea un nuevo archivo para escribir.

  • ab

    Abre un archivo para anexar en formato binario. El puntero del archivo se encuentra al final del archivo si el archivo existe. Es decir, el archivo está en el modo de agregar. Si el archivo no existe, crea un nuevo archivo para escribir.

  • 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.

  • ab +

    Abre un archivo para adjuntar y leer en formato binario. 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.

Del doc ,

Los modos ''r +'', ''w +'' y ''a +'' abren el archivo para actualizar (tenga en cuenta que ''w +'' trunca el archivo). Agregue ''b'' al modo para abrir el archivo en modo binario, en los sistemas que diferencian entre archivos binarios y de texto; en sistemas que no tienen esta distinción, agregar ''b'' no tiene ningún efecto.

y here

w +: Abre un archivo para escribir y leer. Sobrescribe el archivo existente si el archivo existe. Si el archivo no existe, crea un nuevo archivo para leer y escribir.

Pero, ¿cómo leer un archivo abierto con w+ ?


Digamos que estás abriendo el archivo con una declaración como debería ser. Luego harías algo como esto para leer de tu archivo:

with open(''somefile.txt'', ''w+'') as f: # Note that f has now been truncated to 0 bytes, so you''ll only # be able to read data that you wrote earlier... f.write(''somedata/n'') f.seek(0) # Important: return to the top of the file before reading, otherwise you''ll just read an empty string data = f.read() # Returns ''somedata/n''

Observe f.seek(0) : si olvida esto, la llamada f.read() intentará leer desde el final del archivo y devolverá una cadena vacía.


El archivo está truncado, por lo que puede llamar a read() (sin excepciones, a diferencia de cuando se abre usando ''w'') pero obtendrá una cadena vacía.


En realidad, hay algo mal con todas las demás respuestas sobre el modo r+ .

contenido del archivo test.in :

hello1 ok2 byebye3

Y el guión py es:

with open("test.in", ''r+'')as f: f.readline() f.write("addition")

test.in y el contenido de test.in se cambiará a:

hello1 ok2 byebye3 addition

Sin embargo, cuando modificamos el script para:

with open("test.in", ''r+'')as f: f.write("addition")

el test.in también responde:

additionk2 byebye3

Entonces, el modo r+ nos permitirá cubrir el contenido desde el principio si no hiciéramos la operación de lectura. Y si hacemos alguna operación de lectura, f.write() solo se agregará al archivo.

Por cierto, si buscamos f.seek(0,0) antes de f.write(write_content) , write_content los cubrirá desde la posición (0,0).


Sospecho que hay dos formas de manejar lo que creo que estás tratando de lograr.

1) que es obvio, abre el archivo solo para leerlo, léelo en la memoria, abre el archivo con t y luego escribe los cambios.

2) utilice las rutinas de manejo de archivos de bajo nivel:

# Open file in RW , create if it doesn''t exist. *Don''t* pass O_TRUNC fd = os.open(filename, os.O_RDWR | os.O_CREAT)

Espero que esto ayude..


Todos los modos de archivo en Python

  • r para leer
  • r+ abre para leer y escribir (no se puede truncar un archivo)
  • w para escribir
  • w+ para escribir y leer (puede truncar un archivo)
  • rb para leer un archivo binario. El puntero del archivo se coloca al principio del archivo.
  • rb+ leyendo o escribiendo un archivo binario
  • wb+ escribiendo un archivo binario
  • a+ abre para agregar
  • ab+ Abre un archivo para anexar y leer en binario. El puntero del archivo se encuentra al final del archivo si el archivo existe. El archivo se abre en el modo de agregar.
  • x abierto para creación exclusiva, fallando si el archivo ya existe (Python 3)