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()

Создает файл с именем test и записывает два массива под ключами key1 и key2 соответственно.

Однако при закрытии объекта file и повторном открытии файла ранее сохраненные данные удаляются.

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()

В этом случае под ключом key2 хранится только [4,5,6].

Как снова открыть файл и записать новые данные, не удаляя старые данные, которые уже хранятся?

1 2

1 ответ:

Быстрый ответ

Измените h5py.File('test','w') на h5py.File('test','a') (или h5py.File('test'), что по умолчанию соответствует последнему).

Почему

Когда вы создаете экземпляр объекта h5py.File, Вы должны указать mode в качестве второго параметра. Это должно быть одно из следующих:

  • r только для чтения, файл должен существовать
  • r+ чтение / запись, файл должен существовать
  • w создать файл, усечь, если он существует
  • w- или x создать файл, ошибка, если существует
  • a Чтение / запись, если существует, создать в противном случае (по умолчанию)

Использование a - это быстрое решение, но рискованное, если ваша программа не всегда знает, существует ли файл уже. Вы можете добиться любого желаемого поведения менее неоднозначным способом, используя другие режимы наряду с проверкой файлов.