我正在遍历多个文件并读取所需的信息,该信息存储在numpy数组中,然后我将其写到具有唯一名称的h5py文件对象中(例如outputdataset_1,outputdataset_2等)。 ,但是在脚本运行时,它只会将最终数据集写出到文件(outputdataset_numFiles)中。
为简单起见,所有文件解析都被抽象为一个if循环和“ get_data”函数,假设当代码到达文件末尾时,pts数据结构是公平合理的包含所有正确的值。
for num in range(1,numFiles):
with h5py.File("outputFileName.hdf5", "w") as f:
with open("fileAddress" +str(num)) as file:
lineNum = 0
while True:
line = file.readline(lineNum)
if not line and lineNum != 0:
s = 'outputdataset_' +str(num)
dset = f.create_dataset(s,pts.shape,data=pts)
break;
if line == criteria:
pts = get_data(pts,line)
lineNum += 1
答案 0 :(得分:0)
问题在于行for num in range(…)
和with h5py.File(…)
的顺序;按照编写方式,每次加载新文件时都会关闭文件,由于h5py.File()
是用'w'
模式调用的,因此它将(正确)覆盖"outputfilename.hdf5"
每个循环。
解决方案:只需切换这些行即可。
或者(但这可能需要更多代码!),您可以使用“附加”文件模式,即with h5py.File("outputFileName.hdf5", "a") as f
-但是,如果您多次运行脚本,则很可能会遇到RuntimeError: 'Unable to create link (name already exists)'
(反复)。您当然可以编写其他代码,这些代码检查hdf5
文件中的预先存在的路径并实现某种更新/替换逻辑,但是这可能需要花费一些时间来编写代码。