【发布时间】:2022-01-24 16:47:03
【问题描述】:
我正在尝试遍历 hdf5 文件。该文件由一系列“时间戳”组成,每个时间戳都有可变数量的“玩家”,我想从中获取数据。该文件非常大,有超过 17k 的时间戳,我观察到在经过数百次迭代后,获取“players = list(data[timestamp].keys())”所花费的时间从大约 0.0005 秒突然增加了很多大约为 0.05。
with h5py.File(self.hdf5file, "r") as f:
data = f['data']
timestamps = list(data.keys())
for timestamp in timestamps:
start_time = time.time()
players = list(data[timestamp].keys())
end_time = time.time()
print(end_time - start_time)
我不知道会发生什么以及如何解决它。
【问题讨论】:
-
不是一个答案,而是一个可能有帮助的建议。假设你有足够的内存可以尝试:with h5py.File(self.hdf5file, driver='core') as f:
-
@JCaesar 感谢您的评论。你介意解释一下这是做什么的吗?
-
将整个 hdf5 文件读入内存
-
哦,好的,在这种情况下不能这样,因为文件很大(50gb)
-
无需创建列表来迭代组和数据集。您可以像这样遍历名称/键:
for timestamp in data.keys():和for players in data[timestamp].keys():