我一次使用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不重新打开文件,只是使用已经给定的文件句柄?
非常感谢!
答案 0 :(得分:4)
您需要传递mode='r'
明确表示强制以只读模式打开。默认是在mode='a'
(追加模式)中打开。
PyTables的最新版本变得更加严格,只允许在ONCE上以写入模式打开文件,即使在多个进程/线程上也是如此。这是为了避免文件可能损坏。
如果您有最近的HDF5库版本,则可以在只读模式下多次打开文件(否则您将获得不同的异常)。