[英]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.