python有效地将zipfile读入numpy-array

时间:2017-05-03 22:32:48

标签: python arrays performance numpy zipfile

我想将zipfile读入内存并将其内容提取为numpy数组(如numpy-datatypes)。这需要以非常有效/快速的方式发生,因为文件相当大并且存在许多文件。不幸的是,查看类似的问题并没有帮助我,因为我无法找到一种方法在读取时将数据转换为numpy-datatypes。速度也是一个大问题。

例如:zipfile“log_ks818.zip”包含“log_file.csv”,其中包含以下格式所需的数据(yyyymmdd hhnnsszzz,float,float,zero):

20161001 190000100,1.000500,1.000800,0
20161001 190001000,1.001000,1.002000,0
20161001 190002500,1.001500,1.001200,0
...

到目前为止我设法做的最快(使用熊猫):

zfile = zipfile.ZipFile("log_ks818.zip", 'r')
df = pd.read_csv(io.BytesIO(zfile.read("log_file.csv")), header=None, usecols=[0, 1, 2], delimiter=',', encoding='utf-8')
print(df.head())

然而,文件中大约2,000,000行需要大约6秒(如果解压缩大约需要80MB),这太慢了(加上它不是一个numpy对象)。当我比较不同numpy / pandas方法的读入速度时,使用硬盘驱动器上提取的文件进行测试,np.fromfile在0.08秒内表现最佳,只需将其放入内存即可。如果从zip文件中读取数据时可以保持这种程度,那就太好了。

1 个答案:

答案 0 :(得分:0)

我认为这不是关于从磁盘读取速度的问题。即使您使用的是HDD,也可以在一秒钟内将80MB读入内存。

以我的经验为例,时间成本取决于解压缩过程。如果你只使用提取的数据,我相信它不会花费你很多。