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 Mo à 1,6 Go). Je peux le faire (très lentement) pour les fichiers de moins de 300 000 lignes, mais une fois que je dépasse, 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 correspondent au critère seront listés ensemble dans le fichier csv, donc je quitte la boucle lorsque je les dépasse pour gagner du temps.
Mes questions sont:
Comment puis-je faire en sorte que cela fonctionne avec les gros fichiers?
Y a-t-il moyen de le rendre plus rapide?
Mon ordinateur dispose de 8 Go de RAM, exécute Windows 7 64 bits et le processeur est de 3,40 GHz (je ne sais pas quelles informations vous avez besoin).