【发布时间】:2014-07-08 15:52:42
【问题描述】:
我正在寻找可以将 .h5 文件转换为 csv 或 tsv 的示例代码。 我必须阅读 .h5 并且输出应该是 csv 或 tsv。
非常感谢示例代码,请帮助,因为我在过去几天一直坚持使用它。我遵循了包装类,但不知道如何使用它。我不是一个优秀的程序员,所以面临很多问题。
请帮忙 提前非常感谢
【问题讨论】:
-
嗨,您找到解决方案了吗?我也在研究百万歌曲数据集。
我正在寻找可以将 .h5 文件转换为 csv 或 tsv 的示例代码。 我必须阅读 .h5 并且输出应该是 csv 或 tsv。
非常感谢示例代码,请帮助,因为我在过去几天一直坚持使用它。我遵循了包装类,但不知道如何使用它。我不是一个优秀的程序员,所以面临很多问题。
请帮忙 提前非常感谢
【问题讨论】:
使用 pandas HDFStore 对我有用,而 read_hdf 没有:
import h5py
import pandas as pd
paths = []
with h5py.File('examples/test.h5','r') as hf:
hf.visit(paths.append)
dt = pd.HDFStore('examples/test.h5').get(paths[1])
dt.to_csv('test.csv')
【讨论】:
另一个使用pandas的python解决方案。
#!/usr/bin/env python3
import pandas as pd
import sys
fpath = sys.argv[1]
if len(sys.argv)>2:
key = sys.argv[2]
df = pd.read_hdf(fpath, key=key)
else:
df = pd.read_hdf(fpath)
df.to_csv(sys.stdout, index=False)
这个脚本是available here
此脚本的第一个参数是 hdf5 文件。如果传递了第二个参数,则将其视为列的名称,否则将打印所有列。它将 csv 转储到标准输出,您可以将其重定向到文件。
例如,如果您的数据存储在名为 data.h5 的 hdf5 文件中,并且您已将此脚本保存为 hdf2df.py,则
$ python3 hdf2df.py data.hf > data.csv
会将数据写入 csv 文件 data.csv。
【讨论】:
import numpy as np
import h5py
with h5py.File('chunk0003.hdf5','r') as hf:
print('List of arrays in this file: \n', hf.keys())
### This lists arrays in the file [u'_self_key', u'chrms1', u'chrms2', u'cuts1', u'cuts2', u'misc', u'strands1', u'strands2']
r1 = h5py.File('chunk0003.hdf5','r')
a = r1['chrms1'][:]
b = r1['chrms2'][:]
c = r1['cuts1'][:]
d = r1['cuts2'][:]
e = r1['strands1'][:]
f = r1['strands2'][:]
r1.close()
table=np.array([a,b,c,d,e,f])
table2=table.transpose()
np.savetxt('chunk0003.txt',table2,delimiter='\t')
【讨论】:
可以在以下位置找到 HDF5 到 CSV 转换的示例 https://github.com/amgreenstreet/Million-Song-Dataset-HDF5-to-CSV
它使用 Python 并将百万歌曲数据集从 HDF5 转换为 CSV 格式。
我强烈建议使用 Python(x,y) 版本 http://python-xy.github.io/ 因为这个例子使用了额外的 Python 包,比如 NumPy 和 PyTables。 Python(x,y) 包含这些包。
【讨论】:
pip install numpy pytables 立即安装。而 Python(x,y) 自 2015 年以来一直无人维护
你也可以使用h5dump -o dset.asci -y -w 400 dset.h5
-o dset.asci指定输出文件-y -w 400 指定维度大小乘以打印每个值所需的位置和空格数。你应该在这里取一个非常大的数字。dset.h5当然是你要转换的hdf5文件这会将其转换为易于导入到 excel 的 ascii 文件,从中您可以轻松地将其保存为 .csv(另存为 excel 中,并指定文件格式)。我做了几次,它对我有用。 source
【讨论】:
-y -w 400 值是否足够高?这似乎是一个非常庞大的数据库,而且数量可能太少。如果它只是一个像您在 excel 中看到的简单表格,它应该可以工作。 excel中的输出有什么问题?我注意到在导入 .asci 文件时,Excel 中有几个选项,也许那里的东西搞砸了
Python:
import numpy as np
import h5py
np.savetxt(sys.stdout, h5py.File('foo.h5')['dataname'], '%g', ',')
一些注意事项:
"out.csv" 这样的文件名字符串。'\t' 而不是 ','。dataname)。【讨论】:
np.savetxt 吗? docs.scipy.org/doc/numpy/reference/generated/numpy.savetxt.html 说这个功能存在于 1.8 中,它肯定也存在于 1.7 中。您的设置一定有问题,或者您输入错误。