如何使用列表推导与可变数量的文件名列表?

kup*_*gov 4 python file-io list-comprehension contextmanager python-3.x

给出文件名列表filenames = [...].

是否可能重写I/O安全的下一个列表理解:[do_smth(open(filename, 'rb').read()) for filename in filenames]?使用with语句,.close方法或其他东西.

另一个问题是:是否可能为下一个代码编写I/O安全列表理解?

results = []
for filename in filenames:
   with open(filename, 'rb') as file:
      results.append(do_smth(file.read()))
Run Code Online (Sandbox Code Playgroud)

Eug*_*ash 9

您可以将with语句/块放到函数中并在列表解析中调用它:

def slurp_file(filename):
    with open(filename, 'rb') as f:
        return f.read()

results = [do_smth(slurp_file(f)) for f in filenames]
Run Code Online (Sandbox Code Playgroud)