numpy a les fonctions loadtxt
et genfromtxt
, mais aucune n'est particulièrement rapide. L'un des lecteurs de texte les plus rapides disponibles dans une bibliothèque largement distribuée est la fonction read_csv
dans pandas
(http://pandas.pydata.org/). Sur mon ordinateur, lire 5 millions de lignes contenant deux entiers par ligne prend environ 46 secondes avec numpy.loadtxt
, 26 secondes avec numpy.genfromtxt
, et un peu plus de 1 seconde avec pandas.read_csv
.
Voici la session montrant le résultat. (Ceci est sous Linux, Ubuntu 12.04 64 bits. Vous ne pouvez pas le voir ici, mais après chaque lecture du fichier, le cache du disque a été effacé en exécutant sync; echo 3 > /proc/sys/vm/drop_caches
dans une coque séparée.)
In [1]: import pandas as pd
In [2]: %timeit -n1 -r1 loadtxt('junk.dat')
1 loops, best of 1: 46.4 s per loop
In [3]: %timeit -n1 -r1 genfromtxt('junk.dat')
1 loops, best of 1: 26 s per loop
In [4]: %timeit -n1 -r1 pd.read_csv('junk.dat', sep=' ', header=None)
1 loops, best of 1: 1.12 s per loop
Essayez la liste-compréhension. –
Y at-il une raison de ne pas utiliser 'numpy' ici? – DSM
Définir "énorme". En outre, chaque ligne a-t-elle le même nombre d'entiers? –