2016-10-06 1 views
0

Je suis en train de lire un gros fichier csv (environ 100 millions de lignes), en utilisant une commande similaire à celle décrite dans https://docs.python.org/2/library/csv.html. :Lire plus rapidement dans le fichier csv

import csv 
with open('eggs.csv', 'rb') as csvfile: 
    spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|') 
    for row in spamreader: 
      process_row(row) 

Cela se révèle assez lent, je pense que chaque ligne est lu individuellement (nécessitant beaucoup d'appels de lecture sur le disque dur). Est-il possible de lire tout le fichier csv en même temps, puis de le parcourir? Bien que le fichier lui-même soit de grande taille (par exemple 5 Go), mon ordinateur dispose de suffisamment de RAM pour le conserver en mémoire.

+0

Ce code ne lit pas le fichier une ligne à la fois. L'entrée est lue dans des tampons de taille appropriée. –

+1

Il est plus probable qu'il soit lent à cause de l'utilisation de la RAM. Un fichier de 5 Go prend probablement beaucoup plus de 5 Go de RAM après l'analyse. – zvone

+0

Oui - il s'est avéré qu'il a rapidement utilisé 26gb de RAM, avant que mon appareil ne tombe en panne! Leçon apprise ... – kyrenia

Répondre

3
import pandas as pd 
df =pd.DataFrame.from_csv('filename.csv') 

Cela lire en tant dataframe de pandas géants de sorte que vous pouvez faire toutes sortes de choses amusantes avec elle

+0

Peut-être plutôt 'read_csv'? Voir [cette question] (http://stackoverflow.com/questions/26495408/pandas-pandas-dataframe-from-csv-vs-pandas-read-csv). – Scarabee

1

ma machine a suffisamment de RAM pour maintenir que dans la mémoire.

Eh bien, appelez list sur le iterator:

spamreader = list(csv.reader(csvfile, delimiter=' ', quotechar='|'))