Cómo Leer y Escribir Archivos CSV en Python
Spanish (Español) translation by Rafael Chavarría (you can also view the original English article)
El formato CSV es el formato de importación y exportación
más comúnmente usado para bases de datos y hojas de cálculo. Este tutorial te
dará una introducción detalladas a los CSV y los módulos y clases disponibles
para leer y escribir datos a archivos CSV. También cubrirá un ejemplo de trabajo para mostrarte cómo
leer y escribir datos a un archivo CSV en Python.
¿Qué Es un Archivo CSV?
Un archivo CSV (valores separados por comas) permite que los datos sean guardados en una estructura tabular con una extensión .csv. Los archivos CSV han usados de manera extensiva en aplicaciones de comercio electrónico porque son considerados muy fáciles de procesar. Algunas de las áreas en donde han sido usados incluyen:
- importar y exportar datos de clientes
- importar y exportar productos
- exportar órdenes
- exportar reportes analíticos de comercio electrónico
Módulos de Lectura y Escritura
El módulo CSV tiene varia funciones y clases disponibles para leer y escribir CSVs, y estas incluyen:
- función csv.reader
- función csv.writer
- clase csv.Dictwriter
- clase csv.DictReader
csv.reader
El módulo csv.reader toma los siguientes parámetros:
-
csvfile: Este es usualmente un objeto el cuál soporta el protocolo iterador y usualmente devuelve una cadena cada vez que su método__next__()es llamado. -
dialect=’excel’: Un parámetro opcional usado para definir un conjunto de parámetros específicos a un dialecto CSV en particular. -
fmtparams: Un parámetro opcional que puede ser usado para sobrescribir parámetros de formato existentes.
Aquí está un ejemplo de cómo usar el módulo csv.reader.
1 |
import csv |
2 |
|
3 |
with open('example.csv', newline='') as File: |
4 |
reader = csv.reader(File) |
5 |
for row in reader: |
6 |
print(row) |
módulo csv.writer
Este módulo es similar al módulo csv.reader y es usado para escribir datos a un CSV. Este toma tres parámetros:
-
csvfile: Este puede ser cualquier objeto con un métodowrite(). -
dialect=’exel’: Un parámetro opcional usado para definir un conjunto de parámetros específicos a un CSV en particular. -
fmtparam: Un parámetro opcional que puede ser usado para sobrescribir parámetros de formato existentes.
Clases DictReader y DictWriter
DictReader y DictWriter son clases disponibles en Python para leer y escribir a un CSV. Aunque son similares a las funciones reader y writer, estas clases usan objetos de diccionario para leer y escribir a archivos csv.
DictReader
Esta crea un objeto el cuál mapea la información leída a un
diccionario cuyas llaves están dadas por el parámetro fieldnames. Este
parámetro es opcional, pero cuando no se especifica en el archivo, la primera
fila de datos se vuelve las llaves del diccionario.
Ejemplo:
1 |
import csv |
2 |
with open('name.csv') as csvfile: |
3 |
reader = csv.DictReader(csvfile) |
4 |
for row in reader: |
5 |
print(row['first_name'], row['last_name']) |
DictWriter
Esta clase es similar a la clase DictWriter y hace lo
contrario, que es escribir datos a un archivo CSV. La clase es definida
como csv.DictWriter(csvfile, fieldnames,
restval='', extrasaction='raise', dialect='excel', *args, **kwds)
El parámetro fieldnames define la secuencia de llaves que
identifican el orden en el cuál los valores en el diccionario son escritos al
archivo CSV. A diferencia de DictReader, esta llave no es opcional y debe ser
definida para evitar errores cuando se escribe a un CSV.
Dialectos y Formato
Un dialecto es una clase ayudante usada para definir los
parámetros para una instancia reader o writer específica. Los parámetros de
dialecto y formato necesitan ser declarados cuando se realiza una función
lectora o writer.
Hay varios atributos los cuáles están soportados por un dialecto:
- delimiter: Una cadena usada para separar campos. Por defecto
es
‘,‘. - double quoute: Controla cómo las instancias de quotechar que
aparecen dentro de un campo deberían ser citadas. Puede ser Verdadero o Falso.
- escapechar: Una cadena usada por el escritor para escapar el
delimitador si quoiting está establecido a
QUOTE_NONE. - lineterminator: Una cadena usada para terminar líneas
producidas por el
writer. Por defecto es'\r\n'.
- quotechar: Una cadena usada para citar campos conteniendo
caracteres especiales. Por defecto es
'"'. - skipinitialspace: Si se establece a
True, cualquier espacio en blanco después del delimitador es ignorado inmediatamente. - strict: Si se establece a
True, levanta una excepción Error en mala entrada CSV. - quoting: Controla cuando deberían ser generadas las citas
cuando se lee o escribe a un CSV.
Leyendo un Archivo CSV
Veamos cómo leer un archivo CSV usando los módulos de ayuda que hemos discutido arriba.
Crea tu archivo CSV y guárdalo como ejemplo.csv. Asegura que
tiene la extensión .csv y llena algunos datos. Aquí tenemos nuestro archivo CSV
el cual contiene los nombres de los estudiantes y sus calificaciones.



Abajo está el código para leer los datos en nuestro CSV
usando tanto la función csv.reader como la clase csv.DictReader.
Leyendo un Archivo CSV Con csv.reader
1 |
import csv |
2 |
|
3 |
with open('example.csv') as File: |
4 |
reader = csv.reader(File, delimiter=',', quotechar=',', |
5 |
quoting=csv.QUOTE_MINIMAL) |
6 |
for row in reader: |
7 |
print(row) |
En el código de arriba, importamos el módulo CSV y después
abrimos nuestro archivo CSV como File. Entonces definimos el objeto lector y usamos el método
csv.reader para extraer los datos al objeto. Entonces iteramos sobre el objeto
reader y recuperamos cada fila de nuestros datos.
Mostramos los datos leídos imprimiendo sus contenidos a la
consola. También hemos especificado los parámetros requeridos tales como
delimiter, quotechar, y quoting.
Salida
1 |
['first_name', 'last_name', 'Grade'] |
2 |
['Alex', 'Brian', 'B'] |
3 |
['Rachael', 'Rodriguez', 'A'] |
4 |
['Tom', 'smith', 'C'] |
Leyendo un Archivo CSV Con DictReader
Como mencionamos arriba, DictWriter nos permite leer un
archivo CSV mapeando datos a un diccionario en vez de cadenas como en el caso
del módulo csv.rader. Aunque el fieldname es un parámetro opcional, es
importante siempre tener etiquetadas tus columnas para legibilidad.
Aquí está cómo leer un CSV usando la clase DictWriter.
1 |
import csv |
2 |
|
3 |
results = [] |
4 |
with open('example.csv') as File: |
5 |
reader = csv.DictReader(File) |
6 |
for row in reader: |
7 |
results.append(row) |
8 |
print results |
Primero importamos el módulo csv e inicializamos una lista
vacía results la cuál usaremos para almacenar los datos recuperados. Después definimos el objeto lector y usamos el método
csv.DictReader para extraer los datos en el objeto. Entonces iteramos el
objeto reader y recuperamos cada fila de nuestros datos.
Finalmente, adjuntamos cada fila a la lista de resultados e
imprimimos los contenidos a la consola.
Salida
1 |
[{'Grade': 'B', 'first_name': 'Alex', 'last_name': 'Brian'}, |
2 |
{'Grade': 'A', 'first_name': 'Rachael', 'last_name': 'Rodriguez'}, |
3 |
{'Grade': 'C', 'first_name': 'Tom', 'last_name': 'smith'}, |
4 |
{'Grade': 'B', 'first_name': 'Jane', 'last_name': 'Oscar'}, |
5 |
{'Grade': 'A', 'first_name': 'Kennzy', 'last_name': 'Tim'}] |
Como puedes ver arriba, usar la clase DictReader es mejor
porque da nuestros datos en un formato de diccionario con el cual es más
sencillo trabajar.
Escribiendo a un Archivo CSV
Veamos ahora cómo escribir datos a un archivo CSV usando la
función csv.writer y la clase csv.Dictwriter discutida al inicio de este
tutorial.
Escribiendo a un Archivo CSV Usando csv.writer
El código de abajo escribe los datos definidos al archivo
example2.csv.
1 |
import csv |
2 |
|
3 |
myData = [["first_name", "second_name", "Grade"], |
4 |
['Alex', 'Brian', 'A'], |
5 |
['Tom', 'Smith', 'B']] |
6 |
|
7 |
myFile = open('example2.csv', 'w') |
8 |
with myFile: |
9 |
writer = csv.writer(myFile) |
10 |
writer.writerows(myData) |
11 |
|
12 |
print("Writing complete") |
Primero importamos el módulo csv, y la función writer()
creará un objeto apto para escritura. Para iterar los datos sobre las filas,
necesitaremos usar la función writerows().
Aquí está nuestro CSV con los danos que le hemos escrito.



Escribiendo a un Archivo CSV Usando DictWriter
Escribamos los siguientes datos a un CSV.
1 |
data = [{'Grade': 'B', 'first_name': 'Alex', 'last_name': 'Brian'}, |
2 |
{'Grade': 'A', 'first_name': 'Rachael', 'last_name': 'Rodriguez'}, |
3 |
{'Grade': 'C', 'first_name': 'Tom', 'last_name': 'smith'}, |
4 |
{'Grade': 'B', 'first_name': 'Jane', 'last_name': 'Oscar'}, |
5 |
{'Grade': 'A', 'first_name': 'Kennzy', 'last_name': 'Tim'}] |
6 |
|
7 |
El código es como se muestra abajo.
1 |
import csv |
2 |
|
3 |
with open('example4.csv', 'w') as csvfile: |
4 |
fieldnames = ['first_name', 'last_name', 'Grade'] |
5 |
writer = csv.DictWriter(csvfile, fieldnames=fieldnames) |
6 |
|
7 |
writer.writeheader() |
8 |
writer.writerow({'Grade': 'B', 'first_name': 'Alex', 'last_name': 'Brian'}) |
9 |
writer.writerow({'Grade': 'A', 'first_name': 'Rachael', |
10 |
'last_name': 'Rodriguez'}) |
11 |
writer.writerow({'Grade': 'B', 'first_name': 'Jane', 'last_name': 'Oscar'}) |
12 |
writer.writerow({'Grade': 'B', 'first_name': 'Jane', 'last_name': 'Loive'}) |
13 |
|
14 |
print("Writing complete") |
Primero definimos los fieldnames, los cuales representarán
los encabezados de cada columna en el archivo CSV. El método writerrow() escribirá
a una fila a la vez. Si quieres escribir todos los datos de una vez, usarás el
método writerrows().
Aquí está cómo escribir a todas las filas de una vez.
1 |
import csv |
2 |
|
3 |
with open('example5.csv', 'w') as csvfile: |
4 |
fieldnames = ['first_name', 'last_name', 'Grade'] |
5 |
writer = csv.DictWriter(csvfile, fieldnames=fieldnames) |
6 |
|
7 |
writer.writeheader() |
8 |
writer.writerows([{'Grade': 'B', 'first_name': 'Alex', 'last_name': 'Brian'}, |
9 |
{'Grade': 'A', 'first_name': 'Rachael', |
10 |
'last_name': 'Rodriguez'}, |
11 |
{'Grade': 'C', 'first_name': 'Tom', 'last_name': 'smith'}, |
12 |
{'Grade': 'B', 'first_name': 'Jane', 'last_name': 'Oscar'}, |
13 |
{'Grade': 'A', 'first_name': 'Kennzy', 'last_name': 'Tim'}]) |
14 |
|
15 |
print("writing complete") |
Conclusión
Este tutorial ha cubierto la mayoría de lo que se requiere para poder leer y escribir exitosamente a un archivo CSV usando las diferentes funciones y clases proporcionadas por Python. Los archivos CSV han sido usados ampliamente en aplicaciones de software porque son fáciles de leer y administrar y su pequeño tamaño los hacen relativamente rápidos de procesar y transferir.
No dudes en ver lo que tenemos disponible a la venta y para estudio en el marketplace, y no dudes en hacer cualquier pregunta y proporcionar tu valiosa retroalimentación usando la sección de abajo.



