我想读取一个包含整数列表列表的巨大文本文件。
现在我正在执行以下操作:
G = []
with open("test.txt", 'r') as f:
for line in f:
G.append(list(map(int,line.split())))
然而,大约需要 17 秒(计时)。有什么办法可以减少这个时间吗?也许,有一种方法可以不使用地图。
numpy 有以下功能loadtxt
and genfromtxt
,但都不是特别快。在广泛分布的图书馆中可用的最快的文本阅读器之一是read_csv
函数于pandas
(http://pandas.pydata.org/)。在我的计算机上,读取每行包含两个整数的 500 万行大约需要 46 秒numpy.loadtxt
, 26 秒numpy.genfromtxt
,以及 1 秒多一点的时间pandas.read_csv
.
这是显示结果的会话。 (这是在Linux,Ubuntu 12.04 64位上。你在这里看不到它,但是每次读取文件后,通过运行清除磁盘缓存sync; echo 3 > /proc/sys/vm/drop_caches
在一个单独的 shell 中。)
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)