私の質問は、HDF5 ファイルを書き込んだ後に無期限に閉じる方法です。
データを HDF5 ファイルに保存しようとしています。約 200 のフォルダーがあり、各フォルダーには今年の毎日のデータが含まれています。
HDFStore
iPython コンソールで次のコードを使用して pandasを使用してデータを取得して保存すると、しばらくすると関数が自動的に停止します (エラー メッセージは表示されません)。
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を使用しています。
その上、特にMethod 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