我尝试使用sys.argv
语句从with
输入中打开多个文件。
我知道我可以通过手动输入每一个来做到这一点:
with open(sys.argv[1], 'r') as test1, open(sys.argv[2], 'r') as test2, \
open(sys.argv[3], 'r') as test3, open(sys.argv[4], 'r') as test4:
do_something()
但有没有办法不这样做,比如下面的伪代码:
with open(sys.argv[1:4], 'r') as test1, test2, test3:
do_something()
答案 0 :(得分:2)
您可以在Python 3.3+ with contextlib.ExitStack
中执行此操作:
from contextlib import ExitStack
with ExitStack() as stack:
files = [stack.enter_context(open(arg, 'r')) for arg in sys.arv[1:4]]
有趣的是,文档中的示例正是您想要的。
这会在退出with
语句时正确关闭所有打开的文件 - 即使在它们全部打开之前出现问题
对于早期版本的python,有a backport in the contextlib2
package,您可以通过pip
获取