首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过PyTables或PyHDF将大型文本文件“读入”到hdf5中?

通过PyTables或PyHDF将大型文本文件“读入”到hdf5中?
EN

Stack Overflow用户
提问于 2011-01-08 04:09:56
回答 2查看 3.8K关注 0票数 3

我正在尝试使用SciPy进行一些统计,但是我的输入数据集非常大(大约1.9 in ),并且是dbf格式的。这个文件足够大,当我试图用genfromtxt创建一个数组时,Numpy会返回一个错误消息。(我有3 3GB内存,但运行的是win32)。

即:

代码语言:javascript
复制
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输出,但是我应该做什么才能首先将数据放入数组中呢?

例如:

代码语言:javascript
复制
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数据呢?在描述中?

谢谢你可能有的任何想法!

EN

回答 2

Stack Overflow用户

发布于 2011-01-08 06:30:43

如果数据太大,内存无法容纳,您可以使用内存映射文件(它类似于numpy数组,但存储在disk -see docs here上),不过您也可以使用HDF5获得类似的结果,这取决于您需要对该数组执行哪些操作。显然,这会使许多操作变慢,但这总比根本不能做要好。

因为您正在达到内存限制,所以我认为您不能使用genfromtxt。相反,您应该一次迭代一行文本文件,并将数据写入memmap/hdf5对象中的相关位置。

不清楚您所说的“引用回原始dbf数据”是什么意思?显然,您可以只存储它来自某处的文件名。HDF5对象具有旨在存储这种元数据的“属性”。

此外,我还发现使用h5py访问hdf5文件要比pytables简单得多,尽管这在很大程度上是一个偏好问题。

票数 4
EN

Stack Overflow用户

发布于 2011-07-14 02:54:11

如果数据在dbf文件中,您可以尝试my dbf package --它只将正在访问的记录保存在内存中,因此您应该能够循环访问这些记录,从中提取所需的数据:

代码语言:javascript
复制
import dbf

table = dbf.Table(r"W:\RACER_Analyses\Terrestrial_Heterogeneity\IND_SUM.dbf")

sums = [0, 0, 0, 0.0, 0.0, 0]

for record in table:
    for index in range(5):
         sums[index] += record[index]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4629798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档