¿Cómo leo y escribo archivos CSV con Python?

Tengo un archivo example.csv con los contenidos.

 1,"A towel,",1.0 42," it says, ",2.0 1337,is about the most ,-1 0,massively useful thing ,123 -2,an interstellar hitchhiker can have.,3 

¿Cómo leo este example.csv con Python?

Del mismo modo, si tengo

 data = [(1, "A towel,", 1.0), (42, " it says, ", 2.0), (1337, "is about the most ", -1), (0, "massively useful thing ", 123), (-2, "an interstellar hitchhiker can have.", 3)] 

¿Cómo escribo data en un archivo CSV con Python?

Aquí hay algunos ejemplos mínimos completos sobre cómo leer archivos CSV y cómo escribir archivos CSV con Python.

Python 2 + 3: Leyendo un archivo CSV

Pitón puro

 # -*- coding: utf-8 -*- import csv import sys # Define data data = [(1, "A towel,", 1.0), (42, " it says, ", 2.0), (1337, "is about the most ", -1), (0, "massively useful thing ", 123), (-2, "an interstellar hitchhiker can have.", 3)] # Write CSV file kwargs = {'newline': ''} mode = 'w' if sys.version_info < (3, 0): kwargs.pop('newline', None) mode = 'wb' with open('test.csv', mode, **kwargs) as fp: writer = csv.writer(fp, delimiter=',') # writer.writerow(["your", "header", "foo"]) # write header writer.writerows(data) # Read CSV file kwargs = {'newline': ''} mode = 'r' if sys.version_info < (3, 0): kwargs.pop('newline', None) mode = 'rb' with open('test.csv', mode, **kwargs) as fp: reader = csv.reader(fp, delimiter=',', quotechar='"') # next(reader, None) # skip the headers data_read = [row for row in reader] print(data_read) 

Después de eso, los contenidos de data_read son

 [['1', 'A towel,', '1.0'], ['42', ' it says, ', '2.0'], ['1337', 'is about the most ', '-1'], ['0', 'massively useful thing ', '123'], ['-2', 'an interstellar hitchhiker can have.', '3']] 

Unicode y Python 2.X

Si desea escribir Unicode, debe instalar unicodecsv . No abra el archivo con codecs.open sino simplemente con open . Escríbelo con

 import unicodecsv as csv # Write CSV file with open('test.csv', 'w', newline='') as fp: writer = csv.writer(fp, encoding='utf-8') # writer.writerow(["your", "header", "foo"]) # write header writer.writerows(data) 

Relacionado

  • ¿Cómo escribo los datos en formato csv como cadena (no archivo)?
  • ¿Cómo puedo usar io.StringIO () con el módulo csv? : Esto es interesante si desea servir un CSV sobre la marcha con Flask, sin realmente almacenar el CSV en el servidor.

mpu

Eche un vistazo a mi paquete de utilidades mpu para obtener uno super simple y fácil de recordar:

 import mpu.io data = mpu.io.read('example.csv', delimiter=',', quotechar='"', skiprows=None) mpu.io.write('example.csv', data) 

Pandas

 import pandas as pd # Read the CSV into a pandas data frame (df) # With a df you can do many things # most important: visualize data with Seaborn df = pd.read_csv('myfile.csv', sep=',') print(df) # Or export it in many ways, eg a list of tuples tuples = [tuple(x) for x in df.values] # or export it as a list of dicts dicts = df.to_dict().values() 

Consulte la documentación de read_csv para obtener más información. Tenga en cuenta que los pandas se infieren automáticamente si hay una línea de encabezado, pero también puede configurarlo manualmente.

Si no has oído hablar de Seaborn , te recomiendo echarle un vistazo.

Otro

La lectura de archivos CSV es compatible con muchas otras bibliotecas, por ejemplo:

  • dask.dataframe.read_csv
  • spark.read.csv

Archivo CSV creado

 1,"A towel,",1.0 42," it says, ",2.0 1337,is about the most ,-1 0,massively useful thing ,123 -2,an interstellar hitchhiker can have.,3 

Finales de archivos comunes

.csv

Trabajando con los datos

Después de leer el archivo CSV a una lista de tuplas / dados o un dataframe de Pandas, simplemente está trabajando con este tipo de datos. Nada específico de CSV.

Alternativas

  • JSON: Agradable para escribir datos legibles por humanos; Muy de uso común ( lectura y escritura )
  • CSV: formato super simple ( lectura y escritura )
  • YAML: Agradable de leer, similar a JSON ( leer y escribir )
  • pickle: un formato de serialización Python ( lectura y escritura )
  • MessagePack ( paquete de Python ): Representación más compacta ( lectura y escritura )
  • HDF5 ( paquete de Python ): agradable para matrices ( lectura y escritura )
  • XML: existe también * suspiro * ( lectura y escritura )

Para su aplicación, lo siguiente podría ser importante:

  • Soporte por otros lenguajes de progtwigción.
  • Rendimiento de lectura / escritura
  • Compacidad (tamaño del archivo)

Ver también: Comparación de formatos de serialización de datos.

En caso de que esté buscando una forma de crear archivos de configuración, puede leer mi artículo corto Archivos de configuración en Python

Escribiendo un archivo CSV

Primero necesitas importar csv

Por ejemplo:

 import csv with open('eggs.csv', 'wb') as csvfile: spamwriter = csv.writer(csvfile, delimiter=' ', quotechar='|', quoting=csv.QUOTE_MINIMAL) spamwriter.writerow(['Spam'] * 5 + ['Baked Beans']) spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam']) 
 import csv with open(fileLocation+'example.csv',newline='') as File: #the csv file is stored in a File object reader=csv.reader(File) #csv.reader is used to read a file for row in reader: print(row)