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

新手上路,请多包涵

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

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

原文由 Frantischeck003 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

从 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

原文由 Sven Marnach 发布,翻译遵循 CC BY-SA 4.0 许可协议

只需将 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

原文由 Michael 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏