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

时间:2014-05-21 10:10:33

标签: python pandas hdf5 pytables

我一次使用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 个答案:

答案 0 :(得分:4)

您需要传递mode='r'明确表示强制以只读模式打开。默认是在mode='a'(追加模式)中打开。

PyTables的最新版本变得更加严格,只允许在ONCE上以写入模式打开文件,即使在多个进程/线程上也是如此。这是为了避免文件可能损坏。

如果您有最近的HDF5库版本,则可以在只读模式下多次打开文件(否则您将获得不同的异常)。