Módulo csv de Python
Los archivos CSV (Comma-Separated Values) son un formato de archivo común utilizado para almacenar datos tabulares.
Los archivos CSV consisten en texto plano; cada línea representa una fila de datos de la tabla, y cada columna se separa mediante comas (u otro separador).
Los archivos CSV se utilizan a menudo para el intercambio de datos, ya que son simples y fáciles de procesar.
Python proporciona uncsvmódulo, utilizado para leer y escribir archivos CSV. Este módulo simplifica el proceso de manejo de archivos CSV, permitiendo a los desarrolladores manipular datos tabulares fácilmente.
1. Leer archivos CSV
Para leer archivos CSV, se puede usarcsv.readerel objeto. A continuación se muestra un ejemplo simple:
Ejemplo
# Abrir archivo CSV
with open('data.csv', mode='r', encoding='utf-8') as file:
# Crear el objeto csv.reader
csv_reader = csv.reader(file)
# Leer datos línea por línea
for row in csv_reader:
print(row)
Explicación del código:
open('data.csv', mode='r', encoding='utf-8'): abre en modo de solo lecturadata.csvel archivo, y especifica la codificación como UTF-8.csv.reader(file): crear uncsv.readerobjeto, utilizado para leer el contenido del archivo.for row in csv_reader: lee el contenido del archivo línea por línea; cada línea de datos se analiza como una lista.
2. Escribir archivos CSV
Para escribir archivos CSV, se puede usarcsv.writerel objeto. A continuación se muestra un ejemplo:
Ejemplo
# Datos a escribir
data = [
['Name', 'Age', 'City'],
['Alice', '30', 'New York'],
['Bob', '25', 'Los Angeles']
]
# Abrir archivo CSV
with open('output.csv', mode='w', encoding='utf-8', newline='') as file:
# Crear el objeto csv.writer
csv_writer = csv.writer(file)
# Escribir datos
for row in data:
csv_writer.writerow(row)
Explicación del código:
open('output.csv', mode='w', encoding='utf-8', newline=''): abre en modo de escrituraoutput.csvel archivo, y especifica la codificación como UTF-8.newline=''Se usa para evitar líneas en blanco en sistemas Windows.csv.writer(file): crear uncsv.writerobjeto, utilizado para escribir el contenido del archivo.csv_writer.writerow(row): escribe cada línea de datos en el archivo.
3. Leer y escribir archivos CSV con diccionarios
csvEl módulo también proporcionaDictReaderyDictWriterclases, que pueden analizar cada línea del archivo CSV como un diccionario, o escribir un diccionario en un archivo CSV.
ParaDictReaderleer archivos CSV:
Ejemplo
with open('data.csv', mode='r', encoding='utf-8') as file:
csv_dict_reader = csv.DictReader(file)
for row in csv_dict_reader:
print(row)
ParaDictWriterescribir archivos CSV:
Ejemplo
data = [
{'Name': 'Alice', 'Age': '30', 'City': 'New York'},
{'Name': 'Bob', 'Age': '25', 'City': 'Los Angeles'}
]
with open('output.csv', mode='w', encoding='utf-8', newline='') as file:
fieldnames = ['Name', 'Age', 'City']
csv_dict_writer = csv.DictWriter(file, fieldnames=fieldnames)
# Escribir el encabezado
csv_dict_writer.writeheader()
# Escribir datos
for row in data:
csv_dict_writer.writerow(row)
Propiedades y métodos comunes
Métodos principales del módulo csv
| Método | Descripción | Ejemplo |
|---|---|---|
csv.reader() | Leer datos CSV de un objeto de archivo | reader = csv.reader(file) |
csv.writer() | Escribir datos en un archivo CSV | writer = csv.writer(file) |
csv.DictReader() | Leer filas CSV como diccionarios (con encabezado) | dict_reader = csv.DictReader(file) |
csv.DictWriter() | Escribir diccionarios en un archivo CSV (requiere especificar nombres de campo) | dict_writer = csv.DictWriter(file, fieldnames) |
csv.register_dialect() | Registrar un formato CSV personalizado (como el separador) | csv.register_dialect('mydialect', delimiter='|') |
csv.unregister_dialect() | Eliminar un dialecto registrado | csv.unregister_dialect('mydialect') |
csv.list_dialects() | Listar todos los dialectos registrados | print(csv.list_dialects()) |
Métodos comunes de los objetos csv.reader y csv.writer
| Método | Descripción | Objeto aplicable |
|---|---|---|
__next__() | Iterar para leer la siguiente fila (o usarforun bucle) | reader |
writerow(row) | Escribir una sola fila de datos | writer |
writerows(rows) | Escribir múltiples filas de datos (lista de listas) | writer |
Características de los objetos csv.DictReader y csv.DictWriter
| Característica/Método | Descripción | Ejemplo |
|---|---|---|
fieldnames | Lista de nombres de campo (DictReaderobtenida automáticamente desde la primera fila) | dict_reader.fieldnames |
writeheader() | Escribir la fila de encabezado (DictWriterexclusivo) | dict_writer.writeheader() |
Explicación de parámetros comunes
| Parámetro | Descripción | Valor de ejemplo | Método aplicable |
|---|---|---|---|
delimiter | Separador de campos | ','(predeterminado)'\t' | reader/writer |
quotechar | Carácter de comillas (rodea campos especiales) | '"'(predeterminado) | reader/writer |
quoting | Regla de comillas | csv.QUOTE_ALL(citar todo) | reader/writer |
skipinitialspace | Ignorar espacios después del separador | True/False | reader |
lineterminator | Terminador de línea | '\r\n'(predeterminado) | writer |
dialect | Nombre de dialecto predefinido | 'excel'(predeterminado) | Todos los métodos |
Ejemplo
1. Leer archivos CSV
Ejemplo
with open('data.csv', 'r') as file:
reader = csv.reader(file, delimiter=',')
for row in reader:
print(row) # Cada fila es una lista
2. Escribir archivos CSV
Ejemplo
with open('output.csv', 'w', newline='') as file:
writer = csv.writer(file)
writer.writerows(data) # Escribir múltiples filas
3. Usar DictReader y DictWriter (con encabezado)
Ejemplo
with open('data.csv', 'r') as file:
dict_reader = csv.DictReader(file)
for row in dict_reader:
print(row['Name'], row['Age']) # Acceder mediante el nombre del campo
# Escribir
fieldnames = ['Name', 'Age']
with open('output.csv', 'w', newline='') as file:
dict_writer = csv.DictWriter(file, fieldnames=fieldnames)
dict_writer.writeheader() # Escribir encabezado
dict_writer.writerow({'Name': 'Alice', 'Age': 25})
4. Personalizar dialectos (como manejar archivos TSV)
Ejemplo
with open('data.tsv', 'r') as file:
reader = csv.reader(file, dialect='tsv')
for row in reader:
print(row)