如何对可变数量的文件名列表使用列表理解?
How to use list comprehension with list of variable number of filenames?
给定文件名列表 filenames = [...]
。
是否可能重写 I/O-safety 的下一个列表理解:[do_smth(open(filename, 'rb').read()) for filename in filenames]
?使用 with
语句、.close
方法或其他方法。
另一种问题表述:下一段代码是否可以写I/O-safe列表理解?
results = []
for filename in filenames:
with open(filename, 'rb') as file:
results.append(do_smth(file.read()))
您可以将 with
statement/block 放入一个函数并在列表理解中调用它:
def slurp_file(filename):
with open(filename, 'rb') as f:
return f.read()
results = [do_smth(slurp_file(f)) for f in filenames]
您可以使用 Python 3.3 中引入的 ExitStack
来达到此目的:
with ExitStack() as stack:
files = [stack.enter_context(open(name, "rb")) for name in filenames]
results = [do_smth(file.read()) for file in files]
请注意,这会一次打开所有文件,这对于本用例来说不是必需的,如果您有大量文件,这可能不是一个好主意。
给定文件名列表 filenames = [...]
。
是否可能重写 I/O-safety 的下一个列表理解:[do_smth(open(filename, 'rb').read()) for filename in filenames]
?使用 with
语句、.close
方法或其他方法。
另一种问题表述:下一段代码是否可以写I/O-safe列表理解?
results = []
for filename in filenames:
with open(filename, 'rb') as file:
results.append(do_smth(file.read()))
您可以将 with
statement/block 放入一个函数并在列表理解中调用它:
def slurp_file(filename):
with open(filename, 'rb') as f:
return f.read()
results = [do_smth(slurp_file(f)) for f in filenames]
您可以使用 Python 3.3 中引入的 ExitStack
来达到此目的:
with ExitStack() as stack:
files = [stack.enter_context(open(name, "rb")) for name in filenames]
results = [do_smth(file.read()) for file in files]
请注意,这会一次打开所有文件,这对于本用例来说不是必需的,如果您有大量文件,这可能不是一个好主意。