agregar una nueva columna a un archivo csv existente

Tengo un archivo csv con 5 columnas y quiero agregar datos en una sexta columna. Los datos que tengo están en una matriz.

En este momento, el código que tengo insertará los datos que quisiera en la sexta columna, DESPUÉS de todos los datos que ya existen en el archivo csv.

Por ejemplo tengo:

wind, site, date, time, value 10, 01, 01-01-2013, 00:00, 5.1 89.6 ---> this is the value I want to add in a 6th column but it puts it after all the data from the csv file 

Aquí está el código que estoy usando:

 csvfile = 'filename' with open(csvfile, 'a') as output: writer = csv.writer(output, lineterminator='\n') for val in data: writer.writerow([val]) 

Pensé que usar 'a' agregaría los datos en una nueva columna, pero en lugar de eso, simplemente los coloca después de (‘debajo’) todos los demás datos … ¡No sé qué hacer!

La anexión escribe datos al final de un archivo, no al final de cada fila.

En su lugar, cree un nuevo archivo y agregue el nuevo valor a cada fila.

 csvfile = 'filename' with open(csvfile, 'r') as fin, open('new_'+csvfile, 'w') as fout: reader = csv.reader(fin, newline='', lineterminator='\n') writer = csv.writer(fout, newline='', lineterminator='\n') if you_have_headers: writer.writerow(next(reader) + [new_heading]) for row, val in zip(reader, data) writer.writerow(row + [data]) 

En Python 2.x, elimine los argumentos newline='' y cambie los códigos de archivo de 'r' y 'w' a 'rb' y 'wb' , respectivamente.

Una vez que esté seguro de que esto funciona correctamente, puede reemplazar el archivo original por el nuevo:

 import os os.remove(csvfile) # not needed on unix os.rename('new_'+csvfile, csvfile) 

csv módulo csv no admite escribir o agregar columnas. Por lo tanto, lo único que puede hacer es leer un archivo, agregar datos de la sexta columna y escribir en otro archivo. Esto se muestra a continuación:

 with open('in.txt') as fin, open('out.txt', 'w') as fout: index = 0 for line in iter(fin.readline, ''): fout.write(line.replace('\n', ', ' + str(data[index]) + '\n')) index += 1 

data son una lista int .

Pruebo estos códigos en python, funciona bien.

El modo agregado de abrir archivos está destinado a agregar datos al final de un archivo. Lo que debe hacer es proporcionar acceso aleatorio a la escritura de su archivo. necesitas usar el método seek ()

Puede ver y el ejemplo aquí: http://www.tutorialspoint.com/python/file_seek.htm

o lea los documentos de Python que se encuentran aquí: https://docs.python.org/2.4/lib/bltin-file-objects.html que no es muy útil

Si desea agregar al final de una columna, puede abrir el archivo, leer una línea para averiguar su longitud y buscar hasta el final.