2014-11-04 43 views
0

有多个文件时,在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() 

我有一种感觉,这些例子中的任何一个都可以被重构为更优雅的东西。任何例子?

+0

'开放的( 'FILE1.TXT')为F1,打开('file2.txt')为f2:'这样做。 – 2014-11-04 09:38:58

回答

8

的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() context manager(只在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"))