J'essaie actuellement de lire des données à partir de fichiers .csv en Python 2.7 avec jusqu'à 1 million de lignes et 200 colonnes (les fichiers vont de 100 mb à 1,6 gb). Je peux le faire (très lentement) pour les fichiers de moins de 300 000 lignes, mais dès que je dépasse ce chiffre, j'obtiens des erreurs de mémoire. Mon code ressemble à ceci :
def getdata(filename, criteria):
data=[]
for criterion in criteria:
data.append(getstuff(filename, criteron))
return data
def getstuff(filename, criterion):
import csv
data=[]
with open(filename, "rb") as csvfile:
datareader=csv.reader(csvfile)
for row in datareader:
if row[3]=="column header":
data.append(row)
elif len(data)<2 and row[3]!=criterion:
pass
elif row[3]==criterion:
data.append(row)
else:
return data
La raison de la clause else dans la fonction getstuff est que tous les éléments qui répondent au critère seront répertoriés ensemble dans le fichier csv, donc je quitte la boucle lorsque je les dépasse pour gagner du temps.
Mes questions sont les suivantes :
-
Comment faire pour que cela fonctionne avec les plus gros fichiers ?
-
Y a-t-il un moyen de le rendre plus rapide ?
Mon ordinateur possède 8 Go de RAM, fonctionne sous Windows 7 64 bits et son processeur est de 3,40 GHz (je ne suis pas certain des informations dont vous avez besoin).