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

2022-09-05 01:20:27

我想一次更改几个文件,如果我可以写给所有文件。我想知道我是否可以以某种方式将多个开放调用与语句相结合: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

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


答案 1

从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"

请注意,更常见的情况是,您希望按顺序处理文件,而不是同时打开所有文件,尤其是在文件数量可变的情况下:

for fname in filenames:
    with open(fname) as f:
        # Process f

答案 2

只需替换为,您就完成了:and,

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