簡體   English   中英

如何關閉python列表推導中的文件?

[英]How do you close a file within a python list comprehension?

我正在嘗試從許多HDF5文件中提取值並將其存儲在列表中。

import h5py
h = [h5py.File('filenum_%s.h5' % (n),'r')['key'][10][10] for n in range(100)]

此列表filenum0.h5包含HDF5文件filenum0.h5 - filenum99.h5 “鍵”數組中網格點(10,10)的值。

它起作用,除了它在第50個元素附近停止並出現錯誤:
IOError: unable to open file (File accessibilty: Unable to open file)
即使我知道該文件存在,並且如果我沒有打開許多其他文件也可以將其打開。 我想我收到錯誤消息是因為打開了太多文件。

有沒有辦法關閉此列表推導中的文件? 或者,是否有更有效的方法來構建我想要的列表?

通過像執行操作一樣,您無法控制文件關閉的時間。

您可以控制它,但不能使用單線控制。 您需要一個輔助方法來返回數據並關閉文件(使用上下文管理器甚至更好,因為我剛剛檢查了h5py文件支持的情況)

def get_data(n):
    with h5py.File('filenum_%s.h5' % (n),'r') as f:
        return f['key'][10][10]

然后

h = [get_data(n) for n in range(100)]

您可以通過不對10和'key'參數進行硬編碼來使get_data函數更通用。

為了爭辯,您可以像這樣在一個可怕的列表理解中完成所有工作:

import h5py
h = [(f['key'][10][10], f.close())[0]
     for f in (h5py.File('filenum_%s.h5' % (n),'r') for n in range(100))]

但是,我強烈建議不要使用類似的方法,而應該使用輔助功能或其他方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM