python-通过PyTables或PyHDF将大文本文件“读入” hdf5?
作者:互联网
我正在尝试使用SciPy进行一些统计,但是我的输入数据集非常大(〜1.9GB),并且为dbf格式.
该文件足够大,当我尝试使用genfromtxt创建数组时,Numpy会返回错误消息. (我有3GB的ram,但正在运行win32).
即:
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
ind_sum = numpy.genfromtxt(r"W:\RACER_Analyses\Terrestrial_Heterogeneity\IND_SUM.dbf", dtype = (int, int, int, float, float, int), names = True, usecols = (5))
File "C:\Python26\ArcGIS10.0\lib\site-packages\numpy\lib\npyio.py", line 1335, in genfromtxt
for (i, line) in enumerate(itertools.chain([first_line, ], fhd)):
MemoryError
从其他文章中,我看到PyTables提供的分块数组可能很有用,但我的问题是首先读取该数据.换句话说,PyTables或PyHDF可以轻松创建所需的HDF5输出,但是我该怎么做才能首先将数据放入数组中?
例如:
import numpy, scipy, tables
h5file = tables.openFile(r"W:\RACER_Analyses\Terrestrial_Heterogeneity\HET_IND_SUM2.h5", mode = "w", title = "Diversity Index Results")
group = h5.createGroup("/", "IND_SUM", "Aggregated Index Values"`)
然后可以创建表或数组,但是如何参考原始dbf数据呢?在说明中?
感谢您的任何想法!
解决方法:
如果数据太大而无法容纳在内存中,则可以使用内存映射文件(就像一个numpy数组,但存储在磁盘上-see docs here),尽管您可以使用HDF5获得类似的结果,具体取决于您执行的操作需要在阵列上执行.显然,这会使许多操作变慢,但这比根本无法执行更好.
因为您达到内存限制,所以我认为您不能使用genfromtxt.相反,您应该一次遍历文本文件一行,并将数据写入memmap / hdf5对象中的相关位置.
不清楚“返回原始dbf数据”是什么意思?显然,您可以只存储来自某个地方的文件名. HDF5对象具有旨在存储这种元数据的“属性”.
另外,我发现使用h5py是比pytables访问hdf5文件更简单,更干净的方法,尽管这在很大程度上是优先选择的问题.
标签:hdf5,pytables,python 来源: https://codeday.me/bug/20191105/1995852.html