una txt sobreescribir lista importar guardar español escribir ejercicios dat como binarios archivos archivo abrir python

txt - guardar una lista en un archivo python



¿Por qué truncar cuando abrimos un archivo en modo ''w'' en python (7)

Con truncate() , puede declarar la cantidad de archivo que desea eliminar, en función de dónde se encuentre actualmente en el archivo. Sin parámetros, truncate() actúa como w, mientras que w siempre limpia el archivo completo. Entonces, estos dos métodos pueden actuar de manera idéntica, pero no necesariamente.

Estoy repasando el Python Book de Zed Shaw. Actualmente estoy trabajando en la apertura y lectura de capítulos de archivos. Me pregunto por qué tenemos que hacer un truncado, cuando ya estamos abriendo el archivo en modo ''w''?

print "Opening the file..." target = open(filename, ''w'') print "Truncating the file. Goodbye!" target.truncate()


Cuando abre un archivo en modo de escritura, trunca el original (todo lo que estaba allí antes se elimina). Luego, lo que sea que escribas se agrega al archivo. El problema es que escribir quiere agregar información desde el principio y genera un IOError cuando el puntero se deja al final. Para este tipo de escritura, desea usar append (abra el archivo con el argumento ''a +'').


Entonces Zed Shaw llama a truncate () en un archivo que ya está truncado. OK, eso es bastante inútil. ¿Por qué él hace eso? ¿¡Quién sabe!? ¡Preguntarle!

¿Tal vez lo hace para demostrar que el método existe? Podría ser, pero sería una tontería, ya que nunca tuve que truncar un archivo en mis 15 años como programador, así que no tiene cabida en un libro para novatos.

Tal vez lo hace porque cree que tiene que truncar el archivo, y simplemente no es consciente de que no tiene sentido.

Tal vez lo hace intencionalmente para confundir a los novatos? Eso encajaría con su modus operandi general, que parece ser para fastidiar intencionalmente a la gente sin ningún motivo.

Actualización: La razón por la que hace esto ahora está clara. En ediciones posteriores, enumera esta pregunta como una "pregunta común" en el capítulo y le dice que vaya a leer los documentos. Por lo tanto, está ahí para:

  1. Te enseña a leer la documentación.
  2. Comprenda cada parte del código que copia y pegue desde algún lugar antes de copiarlo y pegarlo.

Puedes debatir si este es un buen estilo de enseñanza o no, no lo sé.

El número de "Ayuda, no entiendo el libro de Zed Shaws": las preguntas sobre SO han disminuido, por lo que no puedo decir que sea peor que cualquier otro libro, lo que probablemente significa que es mejor que muchos. :-)


Es redundante ya que, como ha notado, la apertura en modo escritura sobrescribirá el archivo. Más información en la sección de Input and Output de la documentación de Python.


Eso es solo un reflejo de la semántica de posix estándar. ver hombre fopen (3). Python simplemente lo envuelve.


Si LEA las preguntas antes de preguntarlas, él las responderá por usted:

Crédito adicional: "Si sientes que no entiendes esto, regresa y usa el truco de comentarios para que te cuadren en la mente. Un simple comentario en inglés sobre cada línea te ayudará a entender, o al menos, a saber lo que necesita investigar más

Escriba un script similar al último ejercicio que usa read y argv para leer el archivo que acaba de crear.

Hay demasiada repetición en este archivo. Use cadenas, formatos y escapes para imprimir line1 , line1 y line3 con solo un target.write() lugar de 6.

Descubra por qué tuvimos que pasar una ''w'' como un parámetro adicional para abrir. Sugerencia: abierto intenta estar seguro haciendo que explícitamente diga que desea escribir un archivo.

Si abre el archivo con ''w'' modo ''w'' , ¿realmente necesita el target.truncate() ?

Ve a leer los documentos de la función de apertura de Python y mira si eso es cierto. "- Zed Shaw .

Él explícitamente quiere que descubras estas cosas por ti mismo, por eso su crédito extra es importante.

Él también EXPLICITAMENTE declara que él quiere que PAGUE ATENCIÓN AL DETALLE. Cada pequeña cosa importa.


Si bien no es útil truncar cuando se abre en el modo ''w'', es útil en ''r +''. Aunque esa no es la pregunta del OP, voy a dejar esto aquí para todos los que obtengan el liderazgo de Google como lo hice yo.

Digamos que abre (con el modo ''r +'', recuerde que no hay modo ''rw'' ) un archivo json de 5 líneas con sangría y modifique el objeto json.load -ed para que sean solo 3 líneas. Si target.seek(0) antes de volver a escribir los datos en el archivo, terminará con 2 líneas de basura al final. Si lo target.truncate() no lo hará.

Sé que esto parece obvio, pero estoy aquí porque estoy solucionando un error que ocurrió después de que un objeto que permaneció del mismo tamaño durante años ... se redujo debido a un cambio en el algoritmo de firma. (Lo que no es obvio son las pruebas unitarias que tuve que agregar para evitar que esto sea el futuro. Escribí mi docstring más extenso que jamás haya explicado por qué estoy probando la firma con 2 algoritmos ridículamente inventados).

Espero que esto ayude a alguien.