Escribiendo archivos csv en python (Los archivos se dejan en blanco al final de la operación)

Estoy escribiendo en csv en python, y me preguntaba por qué mis archivos de salida están en blanco cuando el progtwig se ejecuta. En primer lugar, aquí está mi código:

reader = csv.reader(open(location, 'rU'), delimiter = ',', quotechar = '"') writer = csv.writer(open('temp.csv', 'wb'), delimiter = ',', quotechar = '"') writer.writerow(["test", "test", "test", "test", "test", "test", "test"]) count = 0 for row in reader: if count != 0 and count < len(split): writer.writerow([row[0], row[1], row[2], row[3], row[4], row[5], split[count-1]]) count = count + 1 

Sé algunas cosas al respecto:

  • Cuando el progtwig termina, todo lo que se escribe en ‘temp.csv’ es la línea de “prueba”. El rest del documento está vacío.
  • Si fuerzo a detener el progtwig a la mitad de la ejecución, de hecho, se está escribiendo texto en el archivo: simplemente se borra por algún motivo.
  • He investigado un poco y muchas personas han encontrado que “cerrar” el archivo csv resuelve sus problemas, pero eso no parece funcionar para mí, ¡a menos que me esté perdiendo algo obvio!

¡Gracias de antemano por tu ayuda!

Edición: aquí hay un código actualizado con el que estoy trabajando:

 infile = open(location, 'rU') outfile = open('temp.csv', 'wb') reader = csv.reader(infile, delimiter = ',', quotechar = '"') writer = csv.writer(outfile, delimiter = ',', quotechar = '"') split = email_text.split('NEW MESSAGE BEGINS HERE') count = 0 for row in reader: if count != 0 and count < len(split): writer.writerow([row[0], row[1], row[2], row[3], row[4], row[5], split[count-1]]) outfile.flush() count = count + 1 infile.close() outfile.close() 

    No estás cerrando el archivo. Aunque esto puede funcionar bien si solo estás leyendo un archivo, definitivamente no es una buena idea hacerlo al escribir un archivo.

    Utilice un administrador de contexto:

     with open(location, 'rU') as infile, open('temp.csv', 'wb') as outfile: reader = csv.reader(infile, delimiter = ',', quotechar = '"') writer = csv.writer(outfile, delimiter = ',', quotechar = '"') ... 

    Esto garantiza que los archivos se cerrarán cuando se cierre el bloque with (incluso si se debe a una excepción).

    Cambie las dos primeras líneas para guardar los manejadores de archivos abiertos y luego incluya las invocaciones de cierre

     reader_file = open(location, 'rU') writer_file = open('temp.csv', 'wb') reader = csv.reader(reader_file, delimiter = ',', quotechar = '"') writer = csv.writer(writer_file, delimiter = ',', quotechar = '"') # ... rest of code ... reader_file.close() writer_file.close()