Hay una manera de abrir un archivo para lectura y escritura?

Como una solución, me abre el archivo para escritura, cerca de él, a continuación, abra de nuevo para leer. Pero hay una manera de abrir un archivo para tanto la lectura y la escritura?

  • cuál es el problema que están resolviendo? tal vez hay una mejor solución que la escritura/lectura de un archivo, por ejemplo, mmap
  • Podría darnos su código, así que vamos a ser capaces de responder. Usted también puede tratar de tomar un vistazo: docs.python.org/tutorial/… . Sin embargo he tratado de usar r+b y funciona. También tiene algún beneficio para el uso de un descriptor de archivo en diff funciones?
InformationsquelleAutor bigredhat | 2011-07-11

3 Comentarios

  1. 232

    Aquí es cómo leer un archivo y, a continuación, escribir en él (sobrescribir los datos existentes), sin necesidad de cerrar y volver a abrir:

    with open(filename, "r+") as f:
        data = f.read()
        f.seek(0)
        f.write(output)
        f.truncate()
    • uso a+ para cubrir el extremo caso de que el archivo no existe (se crea)
    • buscar() y truncate() son críticos.
    • Tenga en cuenta que esto no funciona para anexar texto.
    • la adición de len(datos) a buscar, lee y agrega una nueva cadena, sino que también parece eliminar el último carácter del archivo de texto.
    • Me acaba de abrir una nueva pregunta sobre la lectura y anexar: stackoverflow.com/questions/36965852/…
    • Parece que no ‘r+’ sobrescribe el archivo, sino que se anexa. Es allí una manera de tener a sobrescribir?
    • permite lecturas y escrituras. Puede sobrescribir el archivo siguiendo las instrucciones en la respuesta.
    • Tenga en cuenta que la documentación de a de los estados en algunos sistemas Unix, significa que todas las escrituras anexar al final del archivo, independientemente de la actual posición de búsqueda’. En este caso, el f.seek(0) no funcionará como se espera. Me cayó mal de esto en Linux.
    • gran aporte, no lo he topado en este comportamiento. lo que resolvió su caso? r+?
    • Llanura open() no es suficiente si es posible que no exista. Usted necesita un fd=os.open(..., os.O_RDWR|os.O_CREAT) para garantizar la creación, entonces os.fdopen(fd, 'r+'). Consulte stackoverflow.com/a/10352231/2801913
    • Es mejor explicar por qué seek y truncate se utiliza aquí. La mayoría de los lectores vienen de google y hacer copiar-pegar.
    • Después de leer el archivo, el puntero de archivo(fp) se ha movido hacia adelante, por lo que necesita para establecer el principio. Que es eso de seek(0) hace: los lugares de la fp a la posición 0 (es decir al principio). truncate() truncar el archivo para el número de bytes, es decir elimina todo el contenido del archivo después del número especificado de bytes. Imagina que tu archivo tiene la cadena Hello, world y escribir Bye. Si no truncate() el contenido al final va a ser Byelo, world, ya que nunca se elimina el texto que existían en el archivo. truncate() trunca el archivo a la actual fp.

  2. 41

    r+ es el modo canónico para la lectura y la escritura en el mismo tiempo. Esto no es diferente del uso de la fopen() sistema de llamada desde file() /open() es que sólo un pequeño contenedor en torno a esta llamada de sistema operativo.

  3. 20

    He probado algo como esto y funciona como se esperaba:

    f = open("c:\log.log", 'r+b')
    f.write("\x5F\x9D\x3E")
    f.read(100)
    f.close()

    Donde:

    f.leer(tamaño) – Para leer el contenido de un archivo, llamada f.leer(de tamaño), que
    lee algo de la cantidad de datos y devuelve una cadena de texto.

    Y:

    f.write(cadena) escribe el contenido de la cadena en el archivo, devolviendo
    Ninguno.

    También si abre Tutorial de Python acerca de la lectura y escritura de archivos usted encontrará que:

    ‘r+’ abre el archivo para lectura y escritura.

    En Windows, ‘b’ anexa al modo abre el archivo en modo binario, por lo que
    también hay modos como ‘rb’, ‘wb’, y ‘r+b’.

    • También la lectura, a continuación, la escritura funciona igual de bien el uso de ‘i+b’ modo, pero usted tiene que utilizar f.seek(0) entre f.read() y f.write() para colocar el cursor al principio del archivo.
    • Tenga en cuenta que si los datos que está escrito no es más que los datos que ya existe, no se trunca. El uso de la truncate método para parar esto.

Dejar respuesta

Please enter your comment!
Please enter your name here