En una base tuve el siguiente proceso.¿Cómo se divide un archivo csv en fragmentos de tamaño uniforme en Python?
import csv
reader = csv.reader(open('huge_file.csv', 'rb'))
for line in reader:
process_line(line)
Ver este relacionado question. Deseo enviar la línea de proceso cada 100 filas para implementar la división de lotes.
El problema con la implementación de la respuesta relacionada es que el objeto csv no se puede suscribir y no puede usar len.
>>> import csv
>>> reader = csv.reader(open('dataimport/tests/financial_sample.csv', 'rb'))
>>> len(reader)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: object of type '_csv.reader' has no len()
>>> reader[10:]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '_csv.reader' object is unsubscriptable
>>> reader[10]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '_csv.reader' object is unsubscriptable
¿Cómo puedo solucionar esto?
El problema es que al suscribir el archivo, fuerza a leer todas las líneas del archivo. Este es un archivo muy grande y el uso de memoria aumenta mucho si lo hago. –
Hermoso, gracias @TheMYYN :-) –
@Mario: Se agregó una versión de generador, que podría ser más rápida (pero no tuve tiempo para probarla, tal vez lo haga). – miku