2010-03-02 18 views
89

Estoy tratando de agregar una nueva fila a mi archivo csv anterior. Básicamente, se actualiza cada vez que ejecuto el script de Python.agregar una nueva fila al archivo csv viejo python

Ahora estoy almacenando los valores de las viejas filas de csv en una lista y luego borrando el archivo csv y creándolo nuevamente con el nuevo valor de la lista.

Quería saber si hay alguna forma mejor de hacerlo.

Respuesta

118
fd = open('document.csv','a') 
fd.write(myCsvRow) 
fd.close() 

apertura de un archivo con el parámetro 'a' le permite añadir al final del archivo en lugar de simplemente sobrescribir el contenido existente. Trata eso.

+1

Intenté fp = abrir (csv_filepathwithname, 'wa') writer = csv.escritor (fp) somelist = [3,56,3,6,56] writer.writerow ((somelist)) pero solo la última fila se agrega en el archivo. – laspal

8

¿Está abriendo el archivo con el modo 'a' en vez de 'w'?

Ver Reading and Writing Files en la documentación de Python

7,2. Lectura y escritura de archivos

open() devuelve un objeto de archivo, y se usa más comúnmente con dos argumentos: abrir (nombre de archivo, modo).

>>> f = open('workfile', 'w') 
>>> print f <open file 'workfile', mode 'w' at 80a0960> 

El primer argumento es una cadena que contiene el nombre de archivo. El segundo argumento es otra cadena que contiene algunos caracteres que describen la forma en que se usará el archivo . modo puede ser 'r' cuando el archivo solo será leído, 'w' solo para escritura (un archivo existente con el mismo nombre se borrará ), y 'a' abre el archivo para anexar; cualquier dato escrito en el archivo se agrega automáticamente al final. 'r +' abre el archivo para tanto lectura como escritura. El argumento de modo es opcional; 'r' será asumido si se omite.

En Windows, 'b' agregado al modo abre el archivo en modo binario, así que también hay modos como 'rb', 'wb' y 'r + b'. Python en Windows hace una distinción entre archivos de texto y binarios; los caracteres de final de línea en los archivos de texto se modifican automáticamente cuando se leen o escriben los datos . Esta modificación entre bastidores de los datos de archivo está bien para los archivos de texto ASCII, pero dañará datos binarios como el en archivos JPEG o EXE. Tenga mucho cuidado al usar el modo binario cuando lea y escriba dichos archivos. En Unix, no está de más añadir "b" a el modo, por lo que puede usarlo independientemente de la plataforma para todos los archivos binarios .

+0

puede ser que pueda hacer su respuesta más elaborada, entonces se vería como una respuesta real :-) – user702846

+0

@usuario, agregué un enlace - ¿eso lo ayuda? –

59

prefiero esta solución mediante el módulo csv de la librería estándar y la declaración with para evitar dejar el archivo abierto.

El punto clave es usar 'a' para agregar al abrir el archivo.

import csv 
fields=['first','second','third'] 
with open(r'name', 'a') as f: 
    writer = csv.writer(f) 
    writer.writerow(fields) 

Puede experimentar nuevas líneas superfluas de Windows. Puede intentar evitarlos usando 'ab' en lugar de 'a'.

Cuestiones relacionadas