python - 如何在 Python 中使用 "with open"打开多个文件?

标签 python file-io

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

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

最佳答案

从 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

关于python - 如何在 Python 中使用 "with open"打开多个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4617034/

相关文章:

python - 与 python 类声明的变量有些混淆

java - 使用 Java 在文件中打印 132000 行

vba - 在 VBA 中逐行读取大文件的超快方法是什么?

javascript - 使用plotly.js 从 JSON 构建绘图

java - BufferedReader读取垃圾

c++ - 如何使用 openframworks 的 ofBuffer 将值附加到 XML?

c++ - C++从文件中读取对象

python - python扩展模块中的C++静态成员初始化

python - 如何将 Python 列表添加到 Spark DataFrame?

Python:导入的 Tkinter 程序自行运行?