【发布时间】:2016-12-24 11:36:52
【问题描述】:
我的问题是如何在写入后无限期关闭 HDF5 文件?
我正在尝试将数据保存到 HDF5 文件 - 大约有 200 个文件夹,每个文件夹包含今年每天的一些数据。
当我在 iPython 控制台中使用 pandas HDFStore 和以下代码检索和保存数据时,该函数会在一段时间后自动停止(没有错误消息)。
import pandas as pd
data = ... # in format as pd.DataFrame
# Method 1
data.to_hdf('D:/file_001/2016-01-01.h5', 'type_1')
# Method 2
with pd.HDFStore('D:/file_001/2016-01-01.h5', 'a') as hf:
hf['type_1'] = data
当我再次尝试使用相同的脚本下载数据时,它显示:
[Errno 24] 打开的文件太多:...
有一些帖子建议在 Linux 中使用 ulimit -n 1200 来解决这个问题,但不幸的是我使用的是 Windows。
此外,我想我已经使用 with 闭包明确地关闭了文件,尤其是在 方法 2 中。为什么 iPython 仍然将这些文件视为打开的?
我的循环如下:
univ = pd.read_excel(univ_file, univ_tab)
for dt in pd.DatetimeIndex(start=start_date, end=end_date, freq='B'):
for t in univ:
data = download_data(t, dt)
with pd.HDFStore(data_file, 'a') as hf:
# Use pd.DataFrame([np.nan]) instead of pd.DataFrame() to save space
hf[typ] = EMPTY_DF if data.shape[0] == 0 else data
【问题讨论】:
-
这两种方法都应该正确地关闭存储对象,完成后(通常或有例外)。在“一段时间后自动停止”之后,您重新启动了多少次脚本?
-
@MaxU 谢谢。当他们无例外地停止时,我的脚本无法完成。当我尝试再次运行它时(它会从停止的地方开始),错误 [Errno 24] 出现并且脚本立即停止。所以如果我想运行脚本,我必须关闭 iPython 控制台并重新启动它才能运行
-
你能显示一个你正在调用
.to_hdf()或pd.HDFStore()的循环吗?
标签: python pandas hdf5 hdfstore