Hay dos buenas respuestas: el módulo integrado csv, sin dependencias, o pandas, si vas a analizar los datos. Aquí tienes ambas y los errores que de verdad aparecen.
🎙️ Publicado y grabado:
Cada fila llega como un diccionario cuyas claves salen de la cabecera: código legible y nada de contar índices.
import csv
with open("users.csv", newline="", encoding="utf-8") as f:
for row in csv.DictReader(f):
print(row["name"], row["email"])
# row = {"name": "Ada", "email": "[email protected]", ...} en cada línea
# los valores SIEMPRE son cadenas: convierte tú mismo los números:
total += float(row["amount"])
with open("data.csv", newline="", encoding="utf-8") as f:
reader = csv.reader(f) # filas como listas simples
next(reader) # ← omite la cabecera si hace falta
for row in reader:
print(row[0], row[2])
import pandas as pd
df = pd.read_csv("users.csv")
df.head() # muestra las primeras 5 filas
df["amount"].sum() # las columnas ya vienen tipadas
# opciones habituales:
pd.read_csv("f.csv", sep=";") # archivos con punto y coma (¡Europa!)
pd.read_csv("f.csv", skiprows=2) # líneas sobrantes antes de la cabecera
pd.read_csv("f.csv", usecols=["name","amount"]) # solo algunas columnas¿Cuál elegir? Si lees filas para pasarlas a tu programa, usa el módulo csv y no instales nada. Si vas a filtrar, agrupar o hacer cálculos con columnas, pandas se gana sus 100 MB.
rows = [{"name": "Ada", "score": 95}, {"name": "Lin", "score": 88}]
with open("out.csv", "w", newline="", encoding="utf-8") as f:
w = csv.DictWriter(f, fieldnames=["name", "score"])
w.writeheader()
w.writerows(rows)
UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d: es un archivo UTF-8 abierto sin encoding="utf-8". Además, algunos archivos exportados por Excel requieren encoding="utf-8-sig". El BOM invisible convierte el nombre de la primera columna en "name"; si row["name"] lanza un KeyError inexplicable, esa es la causa. Y si aparecen líneas en blanco entre filas en Windows, olvidaste newline="" en open().line.split(",") funciona hasta que el primer valor contiene una coma, por ejemplo "Smith, John",42. Entonces corrompe tus datos en silencio. Los campos entre comillas son justo la razón por la que existe el módulo csv. Nunca analices un CSV real separándolo a mano.