代码之家  ›  专栏  ›  技术社区  ›  blaylockbk

如何关闭python列表中的文件?

  •  2
  • blaylockbk  · 技术社区  · 8 年前

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

    filenum0.h5 - filenum99.h5


    IOError: unable to open file (File accessibilty: Unable to open file)
    即使我知道该文件存在,如果我没有打开许多其他文件,也可以打开它。我想我是因为打开了太多文件而出错的。

    或者,有没有更有效的方法来建立我想要的列表?

    2 回复  |  直到 8 年前
        1
  •  5
  •   Jean-François Fabre    8 年前

    通过像现在这样做,您无法控制文件何时关闭。

    你可以控制它,但不能用一行。您需要一个辅助方法来返回数据并关闭文件(使用上下文管理器甚至更好,因为 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)]
    

    你可以做 get_data

        2
  •  2
  •   javidcf    8 年前

    为了争论,你 能够 在一个糟糕的列表中完成所有事情,如下所示:

    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))]
    

    但我强烈建议不要这样做,相反,我更喜欢使用辅助函数或其他方法。