同时使用pandas和PyTables(3.1.1)时重新打开已打开的文件

4 投票
1 回答
1780 浏览
提问于 2025-04-18 07:11

我同时使用了pandas和pytables(3.1.1)。问题是我已经用pytables打开了一个HDF5文件,当我尝试用pandas创建一个新的HDF5Store时,

hdf5store = HDFStore(...)

我收到了以下错误信息:

  File "/home/travis/virtualenv/python2.7_with_system_site_packages/local/lib/python2.7/site-packages/pandas/io/pytables.py", line 281, in __init__
    self.open(mode=mode, warn=False)
  File "/home/travis/virtualenv/python2.7_with_system_site_packages/local/lib/python2.7/site-packages/pandas/io/pytables.py", line 387, in open
    self._handle = h5_open(self._path, self._mode)
  File "/home/travis/virtualenv/python2.7_with_system_site_packages/local/lib/python2.7/site-packages/pandas/io/pytables.py", line 154, in h5_open
    return tables.openFile(path, mode)
  File "/home/travis/virtualenv/python2.7_with_system_site_packages/local/lib/python2.7/site-packages/tables/_past.py", line 35, in oldfunc
    return obj(*args, **kwargs)
  File "/home/travis/virtualenv/python2.7_with_system_site_packages/local/lib/python2.7/site-packages/tables/file.py", line 296, in open_file
    _FILE_OPEN_POLICY))
ValueError: The file '/tmp/temp_folder_for_pypet_tests/experiments/tests/HDF5/merge1.hdf5' is already opened.  Please close it before reopening.  HDF5 v.1.8.4-patch1, FILE_OPEN_POLICY = 'strict'

我该如何告诉pandas不要重新打开这个文件,而是直接使用已经打开的文件句柄呢?

非常感谢!

1 个回答

4

你需要明确地传入 mode='r',这样才能强制以只读模式打开文件。默认情况下,文件是以 mode='a'(追加模式)打开的。

最近版本的 PyTables 对于文件的打开方式变得更加严格,只允许在写入模式下打开文件一次,即使是在多个进程或线程中也是如此。这是为了避免文件可能出现损坏。

如果你使用的是较新的 HDF5 库版本,可以多次以只读模式打开文件(否则你会遇到不同的异常)。

撰写回答