【问题标题】:Converting hdf5 to csv or tsv files将 hdf5 转换为 csv 或 tsv 文件
【发布时间】:2014-07-08 15:52:42
【问题描述】:

我正在寻找可以将 .h5 文件转换为 csv 或 tsv 的示例代码。 我必须阅读 .h5 并且输出应该是 csv 或 tsv。

非常感谢示例代码,请帮助,因为我在过去几天一直坚持使用它。我遵循了包装类,但不知道如何使用它。我不是一个优秀的程序员,所以面临很多问题。

请帮忙 提前非常感谢

【问题讨论】:

  • 嗨,您找到解决方案了吗?我也在研究百万歌曲数据集。

标签: csv bigdata hdf5


【解决方案1】:

使用 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')

【讨论】:

    【解决方案2】:

    另一个使用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

    【讨论】:

      【解决方案3】:
      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')
      

      【讨论】:

        【解决方案4】:

        可以在以下位置找到 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) 包含这些包。

        【讨论】:

        • 到目前为止,numpy 和 pytables 可以通过pip install numpy pytables 立即安装。而 Python(x,y) 自 2015 年以来一直无人维护
        【解决方案5】:

        你也可以使用h5dump -o dset.asci -y -w 400 dset.h5

        • -o dset.asci指定输出文件
        • -y -w 400 指定维度大小乘以打印每个值所需的位置和空格数。你应该在这里取一个非常大的数字。
        • dset.h5当然是你要转换的hdf5文件

        这会将其转换为易于导入到 excel 的 ascii 文件,从中您可以轻松地将其保存为 .csv(另存为 excel 中,并指定文件格式)。我做了几次,它对我有用。 source

        【讨论】:

        • 嗨 Mathias,我按照你说的做,但没有得到满意的答案。h5dump 的问题是它以分层形式提供数据,当我们在 excel 中打开它时,它不会输出为异常。我是致力于百万歌曲数据集。
        • -y -w 400 值是否足够高?这似乎是一个非常庞大的数据库,而且数量可能太少。如果它只是一个像您在 excel 中看到的简单表格,它应该可以工作。 excel中的输出有什么问题?我注意到在导入 .asci 文件时,Excel 中有几个选项,也许那里的东西搞砸了
        • 是的,我使用了 -y -w 800,并且在使用整个数据集之前,我在 377kb 文件上对其进行了测试。如您所知,输入是 .h5 格式,我猜它是表格形式。它有 52 个字段。我有 20 条记录的样本数据,在与 ascii 文件的输出进行比较时,它完全不同(在格式方面而不是在数据方面)。我只是用 Excel 打开 ascii 文件。
        【解决方案6】:

        Python:

        import numpy as np
        import h5py
        np.savetxt(sys.stdout, h5py.File('foo.h5')['dataname'], '%g', ',')
        

        一些注意事项:

        1. sys.stdout 可以是任何文件,也可以是像"out.csv" 这样的文件名字符串。
        2. %g 用于使格式化更人性化。
        3. 如果您想要 TSV,只需使用 '\t' 而不是 ','
        4. 我假设您在文件中只有一个数据集名称 (dataname)。

        【讨论】:

        • 嗨,约翰,我遵循了您的解决方案,但它说 AttributeError: 'module' object has no attribute 'savetxt'。我正在使用 Numpy-1.8.1 和 h5py-2.3 以及 Python 3.3。
        • 你能试着在 REPL 中说np.savetxt 吗? docs.scipy.org/doc/numpy/reference/generated/numpy.savetxt.html 说这个功能存在于 1.8 中,它肯定也存在于 1.7 中。您的设置一定有问题,或者您输入错误。
        • 嗨,约翰,我已经浏览了您提供的链接。抱歉,我不熟悉 REPL 语言。我不明白可能是什么原因。我的代码是: import numpy as n import h5py file='C:\Users\user10\Desktop\foo' n.savetxt('example_output.csv', file, delimiter=',')
        • REPL 是 Python 交互式解释器。只需在终端中运行“python”,然后说“import numpy”,然后说“numpy.savetxt”。它告诉你什么?函数存在吗?
        • 它说“回溯(最近一次调用最后一次):文件“”,第 1 行,在 numpy.savetxt AttributeError:“模块”对象没有属性“savetxt” " 我认为问题出在包上。你能建议我从哪里下载它吗?
        猜你喜欢
        • 2019-05-30
        • 2016-12-13
        • 1970-01-01
        • 2020-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-30
        • 2015-01-27
        相关资源
        最近更新 更多