如何在Python中使用“ with open”打开多个文件?

发布于 2021-02-02 23:17:46

我想一次更改几个文件,前提是我可以写入所有文件。我想知道是否可以将多个打开的调用与该with语句组合:

try:
  with open('a', 'w') as a and open('b', 'w') as b:
    do_something()
except IOError as e:
  print 'Operation failed: %s' % e.strerror

如果不可能,那么解决该问题的优雅解决方案会是什么样?

关注者
0
被浏览
77
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    从Python 2.7(或分别为3.1)开始,你可以编写

    with open('a', 'w') as a, open('b', 'w') as b:
        do_something()
    

    在早期版本的Python中,有时可以使用contextlib.nested()嵌套上下文管理器。但是,这对于打开多个文件无法正常工作-有关详细信息,请参见链接的文档。

    在极少数情况下,你想同时打开全部数量不定的文件,可以使用contextlib.ExitStack从Python 3.3版开始的:

    with ExitStack() as stack:
        files = [stack.enter_context(open(fname)) for fname in filenames]
        # Do something with "files"
    

    大多数情况下,你拥有一组可变的文件,但是你可能想要一个接一个地打开它们。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看