【问题标题】:Is there way to write hdf5 files row by row in Python?有没有办法在 Python 中逐行编写 hdf5 文件?
【发布时间】:2019-09-20 08:55:45
【问题描述】:

对于 CSV 文件,我们可以使用

writer = csv.writer(output)
writer.writerow([a, b, c, d])

写Hdf5文件有类似的东西吗?

【问题讨论】:

  • 是的,您可以附加到表和数组。您使用的是哪个 Python HDF5 模块? h5pypytables (tables)?
  • 'h5py or pytables (tables)' 呃,我以为它们是一样的?我使用的数据有两行字符串和两行float32。我希望这在 Pandas 中是可读的。有什么建议吗?

标签: python hdf5 pytables hdfql


【解决方案1】:

如果您不受特定技术的约束,请查看HDFql,因为这可以让您在处理 HDF5 文件时从低级细节中解脱出来。

要解决您的问题,您需要创建一个具有两个维度的数据集:第一个是可扩展的,第二个的大小为四(根据您的代码 sn-p,我假设您希望每行存储四个整数;另外,如果数据类型不是整数,请检查 HDFql reference manual 以获取所有数据类型的枚举并相应更改下面的代码 sn-p)。

在 Python 中,要创建这样的数据集,请执行(在本例中称为 dset):

HDFql.execute("CREATE DATASET dset AS INT(UNLIMITED, 4)")

然后,对于您要写入的每一行,执行(请将val0val1val2val3 替换为适当的值):

HDFql.execute("INSERT INTO dset(-1:::) VALUES(%d, %d, %d, %d)" % (val0, val1, val2, val3))

...最后,将数据集dset 的第一个维度扩展如下:

HDFql.execute("ALTER DIMENSION dset TO +1")

重复代码 sn-p 行 #2 和 #3 的次数与您要编写的行一样多。

【讨论】:

    【解决方案2】:

    这与您的其他问题类似。Error when trying to save hdf5 row where one column is a string and the other is an array of floats

    使用 pytables,您可以创建一个空表,引用定义每个数据类型的 dtype(在本例中为 4 个浮点数)。然后您使用table_object.append(row_data) 添加1 行或多行数据,其中row_data 可以使用元组列表或numpy recarray 定义。请参阅我发布以回答上述问题的完整示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-24
      • 1970-01-01
      相关资源
      最近更新 更多