CSVWriter no guarda los datos para archivar el momento en que lo escribo

Python newbie está un poco frustrado con el módulo csv. A este ritmo, hubiera sido más fácil si yo mismo escribiera el analizador de archivos, pero quiero hacer las cosas de la manera pythonica …

He escrito un pequeño script en Python que debería guardar mis datos en un archivo CSV.

Aquí hay un fragmento de mi código:

import csv wrtr = csv.writer(open('myfile.csv','wb'),delimiter=',', quotechar='"') for row in rows: wrtr.writerow([row.field1,row.field2,row.field3]) 

El archivo myfile.csv se creó con éxito, pero está vacío, pero tiene un locking, ya que todavía está siendo utilizado por el proceso de Python. Parece que los datos se han escrito en el archivo en la memoria, pero aún no se han vaciado en el disco.

Dado que el proceso de Python mantiene un locking en el archivo, asumo que soy responsable de liberar el locking. Aquí están mis preguntas:

  1. ¿Cómo puedo hacer que Python se descargue en el disco?
  2. ¿Cómo cierro el archivo que se abrió en el método csv.writer ()?

Utilizar

 with open('myfile.csv','wb') as myfile: wrtr = csv.writer(myfile, delimiter=',', quotechar='"') for row in rows: wrtr.writerow([row.field1,row.field2,row.field3]) myfile.flush() # whenever you want 

o

 myfile = open('myfile.csv','wb') wrtr = csv.writer(myfile, delimiter=',', quotechar='"') for row in rows: wrtr.writerow([row.field1,row.field2,row.field3]) myfile.flush() # whenever you want, and/or myfile.close() # when you're done. 

Lo bueno de la primera aproximación es que su archivo también se cerrará automáticamente en caso de una Excepción.

Si desea que su objeto de archivo sea anónimo, solo se cerrará cuando el progtwig salga. Cuando o si se descarga depende del sistema operativo, por lo que nunca será hasta que salga.

Los métodos flush() y close() del objeto de archivo . O utilizar with .