簡體   English   中英

在 Python 中處理多個文件時如何避免嵌套的“with”語句

[英]How to avoid nested "with" statements when working with multiple files in Python

在 Python 代碼中處理多個文件時,使用推薦的樣式可能會變得難看:

with open("foo.txt") as foo:
    with open("bar.txt", "w") as bar:
         with open("baz.txt", "w") as baz:
              # Read from foo, write different output to bar an baz

這是僅用於處理文件的三個縮進級別! 替代方案是這個

foo = open("foo.txt")
bar = open("bar.txt", "w")
baz = open("baz.txt", "w")
# Read from foo, write different output to bar an baz
foo.close()
bar.close()
baz.close()

我有一種感覺,這些例子中的任何一個都可以重構為更優雅的東西。 有什么例子嗎?

Python 2.7 及更高版本允許您在一個with語句中指定多個上下文管理器:

with open("foo.txt") as foo, open("bar.txt", "w") as bar, open("baz.txt", "w") as baz:
    # Read from foo, write different output to bar an baz

該行確實很長,並且您不能使用括號將其保持在 80 個字符以下。 但是,您可以使用\\反斜杠延續:

with open("foo.txt") as foo,\
        open("bar.txt", "w") as bar,\
        open("baz.txt", "w") as baz:
    # Read from foo, write different output to bar an baz

另一種選擇是使用contextlib.ExitStack()上下文管理器(僅在 Python 3.3 及更高版本中):

from contextlib import ExitStack

with ExitStack() as stack:
    foo = stack.enter_context(open("foo.txt"))
    bar = stack.enter_context(open("bar.txt"))
    baz = stack.enter_context(open("baz.txt"))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM