如何使用pytables截断HDF5文件中的EARRAY?

时间:2015-08-27 17:08:38

标签: python numpy hdf5 pytables

我有一个包含非常大的EARRAY的HDF5文件,我想截断它以节省磁盘空间并更快地处理它。我在包含EARRAY的节点上使用truncate方法。 pytables报告该数组已被截断但仍占用磁盘上相同的空间量。

截断前的目录列表:

$ ll total 3694208
-rw-rw-r-- 1 chris        189 Aug 27 13:03 main.py
-rw-rw-r-- 1 chris 3782858816 Aug 27 13:00 original.hdf5

我用来截断的脚本(main.py):

import tables
filename = 'original.hdf5'
h5file = tables.open_file(filename, 'a')
print h5file
node = h5file.get_node('/recordings/0/data')
node.truncate(30000)
print h5file
h5file.close()

脚本输出。正如所料,EARRAY从非常大到小得多。

original.hdf5 (File) ''
Last modif.: 'Thu Aug 27 13:00:12 2015'
Object Tree: 
/ (RootGroup) ''
/recordings (Group) ''
/recordings/0 (Group) ''
/recordings/0/data (EArray(43893300, 43)) ''
/recordings/0/application_data (Group) ''

original.hdf5 (File) ''
Last modif.: 'Thu Aug 27 13:00:12 2015'
Object Tree: 
/ (RootGroup) ''
/recordings (Group) ''
/recordings/0 (Group) ''
/recordings/0/data (EArray(30000, 43)) ''
/recordings/0/application_data (Group) ''

然而,该文件在磁盘上占用的空间几乎完全相同:

ll
total 3693196
-rw-rw-r-- 1 chris        189 Aug 27 13:03 main.py
-rw-rw-r-- 1 chris 3781824064 Aug 27 13:03 original.hdf5

我做错了什么?我该如何收回这个磁盘空间?

如果有办法直接修改earray的内容,而不是使用truncate方法,这对我来说更有用。类似于node = node [idx1:idx2,:],这样我就可以选择要保留的数据块。但是当我使用这种语法时,变量node只是变成一个numpy数组而且hdf5文件没有被修改。

0 个答案:

没有答案