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

2024-04-19 17:45:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我想一次更改几个文件,iff我可以写入所有文件。我想知道是否可以将多个打开的调用与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

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


Tags: and文件aswith语句openoperationdo
3条回答

对于一次打开多个文件或长文件路径,在多行上进行拆分可能会很有用。从@Sven Marnach在评论中建议的Python Style Guide到另一个答案:

with open('/path/to/InFile.ext', 'r') as file_1, \
     open('/path/to/OutFile.ext', 'w') as file_2:
    file_2.write(file_1.read())

只要用,替换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

从Python2.7开始(或者分别是3.1),您可以编写

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

在早期版本的Python中,有时可以使用 ^{}来嵌套上下文管理器。不过,对于打开多个文件,这并不能像预期的那样工作——有关详细信息,请参阅链接的文档。


在少数情况下,您希望同时打开可变数量的文件,可以使用^{},从Python 3.3版开始:

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

大多数情况下,您有一组可变的文件,但您可能希望逐个打开它们。

相关问题 更多 >