Persistencia de datos de Python - Módulo CSV

CSV stands for comma separated values. Este formato de archivo es un formato de datos de uso común al exportar / importar datos hacia / desde hojas de cálculo y tablas de datos en bases de datos. El módulo csv se incorporó a la biblioteca estándar de Python como resultado de PEP 305. Presenta clases y métodos para realizar operaciones de lectura / escritura en archivos CSV según las recomendaciones de PEP 305.

CSV es un formato de datos de exportación preferido por el software de hoja de cálculo Excel de Microsoft. Sin embargo, el módulo csv también puede manejar datos representados por otros dialectos.

La interfaz de la API de CSV consta de las siguientes clases de escritor y lector:

escritor()

Esta función en el módulo csv devuelve un objeto escritor que convierte los datos en una cadena delimitada y los almacena en un objeto de archivo. La función necesita un objeto de archivo con permiso de escritura como parámetro. Cada fila escrita en el archivo emite un carácter de nueva línea. Para evitar espacio adicional entre líneas, el parámetro de nueva línea se establece en ''.

La clase de escritor tiene los siguientes métodos:

escritor ahora ()

Este método escribe elementos en un iterable (lista, tupla o cadena), separándolos por comas.

Writerows ()

Este método toma una lista de iterables, como parámetro, y escribe cada elemento como una línea de elementos separados por comas en el archivo.

Example

El siguiente ejemplo muestra el uso de la función writer (). Primero se abre un archivo en modo 'w'. Este archivo se utiliza para obtener el objeto escritor. Cada tupla en la lista de tuplas se escribe en un archivo usando el método writerow ().

import csv
   persons=[('Lata',22,45),('Anil',21,56),('John',20,60)]
   csvfile=open('persons.csv','w', newline='')
   obj=csv.writer(csvfile)
   for person in persons:
      obj.writerow(person)
csvfile.close()

Output

Esto creará el archivo 'persons.csv' en el directorio actual. Mostrará los siguientes datos.

Lata,22,45
Anil,21,56
John,20,60

En lugar de iterar sobre la lista para escribir cada fila individualmente, podemos usar el método writerows ().

csvfile=open('persons.csv','w', newline='')
persons=[('Lata',22,45),('Anil',21,56),('John',20,60)]
   obj=csv.writer(csvfile)
   obj.writerows(persons)
   obj.close()

lector()

Esta función devuelve un objeto lector que devuelve un iterador de líneas en el csv file. Usando el bucle for regular, todas las líneas del archivo se muestran en el siguiente ejemplo:

Ejemplo

csvfile=open('persons.csv','r', newline='')
   obj=csv.reader(csvfile)
   for row in obj:
      print (row)

Salida

['Lata', '22', '45']
['Anil', '21', '56']
['John', '20', '60']

El objeto lector es un iterador. Por lo tanto, admite la función next () que también se puede usar para mostrar todas las líneas en el archivo csv en lugar de unfor loop.

csvfile=open('persons.csv','r', newline='')
   obj=csv.reader(csvfile)
   while True:
   try:
      row=next(obj)
      print (row)
   except StopIteration:
      break

Como se mencionó anteriormente, el módulo csv usa Excel como su dialecto predeterminado. El módulo csv también define una clase de dialecto. El dialecto es un conjunto de estándares que se utilizan para implementar el protocolo CSV. La lista de dialectos disponibles se puede obtener mediante la función list_dialects ().

>>> csv.list_dialects()
['excel', 'excel-tab', 'unix']

Además de los iterables, el módulo csv puede exportar un objeto de diccionario a un archivo CSV y leerlo para completar el objeto de diccionario de Python. Para este propósito, este módulo define las siguientes clases:

DictWriter ()

Esta función devuelve un objeto DictWriter. Es similar al objeto escritor, pero las filas se asignan al objeto del diccionario. La función necesita un objeto de archivo con permiso de escritura y una lista de claves utilizadas en el diccionario como parámetro de nombres de campo. Se utiliza para escribir la primera línea del archivo como encabezado.

writeheader ()

Este método escribe la lista de claves en el diccionario como una línea separada por comas como primera línea en el archivo.

En el siguiente ejemplo, se define una lista de elementos del diccionario. Cada elemento de la lista es un diccionario. Usando el método writrows (), se escriben en el archivo separados por comas.

persons=[
   {'name':'Lata', 'age':22, 'marks':45}, 
   {'name':'Anil', 'age':21, 'marks':56}, 
   {'name':'John', 'age':20, 'marks':60}
]
csvfile=open('persons.csv','w', newline='')
fields=list(persons[0].keys())
obj=csv.DictWriter(csvfile, fieldnames=fields)
obj.writeheader()
obj.writerows(persons)
csvfile.close()

El archivo persons.csv muestra los siguientes contenidos:

name,age,marks
Lata,22,45
Anil,21,56
John,20,60

DictReader ()

Esta función devuelve un objeto DictReader del archivo CSV subyacente. Como, en el caso del objeto lector, éste también es un iterador, con el que se recuperan los contenidos del archivo.

csvfile=open('persons.csv','r', newline='')
obj=csv.DictReader(csvfile)

La clase proporciona el atributo de nombres de campo, devolviendo las claves de diccionario utilizadas como encabezado del archivo.

print (obj.fieldnames)
['name', 'age', 'marks']

Utilice bucle sobre el objeto DictReader para buscar objetos de diccionario individuales.

for row in obj:
   print (row)

Esto da como resultado la siguiente salida:

OrderedDict([('name', 'Lata'), ('age', '22'), ('marks', '45')])
OrderedDict([('name', 'Anil'), ('age', '21'), ('marks', '56')])
OrderedDict([('name', 'John'), ('age', '20'), ('marks', '60')])

Para convertir el objeto OrderedDict en un diccionario normal, primero tenemos que importar OrderedDict desde el módulo de colecciones.

from collections import OrderedDict
   r=OrderedDict([('name', 'Lata'), ('age', '22'), ('marks', '45')])
   dict(r)
{'name': 'Lata', 'age': '22', 'marks': '45'}