【发布时间】:2018-02-15 07:25:58
【问题描述】:
我似乎无法让它工作。所有示例和线程都有人创建新数据集。我只想更新已经创建的数据集中的一个字段。
这是我所拥有的:
h5_file = h5py.File(event_file_path, "r+") #this works
event_processing_status = int(h5_file[PATH][STATUS].value[0]['Status']) #this works
print({"{0:b}".format(event_processing_status)) #this works
event_processing_status = (event_processing_status | STATUS_UPDATE) #this works
h5_file[PATH][STATUS].value[0]['Status'] = event_processing_status #updating???, no error
event_processing_status = int(h5_file[PATH][STATUS].value[0]['Status']) #this works
print({"{0:b}".format(event_processing_status)) #not the update value
h5_file.close()
我做错了什么?
更多信息: 数据集列的dtypes:
dset = h5_file[PATH][STATUS]
print(dset.dtype) gives:
[('Status', '<u8'), ('Segments', '<u4'), ('Characterized', '<u4'), ('More_Segments', '<u4'), ('ID', '<i4'), ('Releases', '<u2'), ('Type', '|u1'), ('Track', '<i4')]
dset[0,'Status'] = event_processing_status gives:
TypeError: Field name selections are not allowed for write.
【问题讨论】:
-
在这一行
h5_file[PATH][STATUS].value[0]['Status']) = event_processing_status有一个额外的 ) 左侧赋值。它真的在那里吗?还是错字? -
复制粘贴错字,抱歉
-
尝试更改索引顺序,
[Status'][0]。我假设Status是结构化数组字段名称。h5py让您将记录号和字段名称组合到一个语句中:dset[0, 'Status'] = status。 docs.h5py.org/en/latest/high/dataset.html#reading-writing-data。如果我的猜测没有帮助,请向我们展示此数据集的dtype。 -
['Status'][0] 不起作用。数据类型是 uint64。我也试过 h5_file[PATH][STATUS]['Status'] = event_processing_status 但得到“TypeError: Field name selections are not allowed for write.
-
给我们更多关于这个数据集结构的信息。