使用with语句打开文件列表

时间:2017-03-29 01:07:06

标签: python python-2.7

我尝试使用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()

1 个答案:

答案 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获取