H5py:以写入模式重新打开文件会删除以前的数据

Sou*_*nak 2 python file hdf5 h5py

import h5py
import numpy as np

f = h5py.File('test','w')
f.create_dataset('key1', data = np.array([1,2,3]))
f.create_dataset('key2', data = np.array([4,5,6]))
f.close()
Run Code Online (Sandbox Code Playgroud)

创建名为 test 的文件,并分别在 key1 和 key2 下写入两个数组。

但是,关闭文件对象并重新打开文件会删除以前存储的数据。

f = h5py.File('test','w')
f.create_dataset('key1', data = np.array([1,2,3]))
f.close()
f = h5py.File('test','w')
f.create_dataset('key2', data = np.array([4,5,6]))
f.close()
Run Code Online (Sandbox Code Playgroud)

在这种情况下,仅[4,5,6]存储在 key 下key2

如何重新打开文件并写入新数据而不删除已存储的旧数据?

rjo*_*nal 5

快速回答

更改h5py.File('test','w')h5py.File('test','a')(或h5py.File('test'),默认为后者)。

为什么

实例化h5py.File对象时,必须指定 amode作为第二个参数。这必须是以下之一:

  • r 只读,文件必须存在
  • r+ 读/写,文件必须存在
  • w 创建文件,如果存在则截断
  • w-x 创建文件,如果存在则失败
  • a 读/写如果存在,否则创建(默认)

使用a是一个快速修复,但如果您的程序并不总是知道文件是否已经存在,则风险很大。通过使用其他模式和文件检查,您可以以更明确的方式实现任何所需的行为。