我有csv读者和作家。我知道你必须打开和关闭底层对象。一种方法是首先创建文件对象f,使用csv reader然后使用f.close()。
但是,我似乎无法做到以下几点:
with open(outputpath) as f_outputfile:
outputfile = csv.writer(f_outputfile)
OTHER CODE HERE
我想要做的是立即打开一堆读者,同时打开一堆作者,让它们全部自动关闭。但是,这是否意味着我有一个嵌套的“With”块?
答案 0 :(得分:5)
写作:
with open(outputpath) as f_outputfile:
outputfile = csv.writer(f_outputfile)
OTHER CODE HERE
基本上与:
相同f_outputfile = open(outputpath)
try:
outputfile = csv.writer(f_outputfile)
finally:
f_outputfile.close()
OTHER CODE HERE
如果OTHER CODE HERE
依赖于正在打开的文件,则无法正常工作。
答案 1 :(得分:3)
您可以在with statement中堆叠多个项目(看起来这是2.7.x及更高版本的功能):
with open(foo) as f_foo, open(bar) as f_bar:
# do something
7.5。 with声明
2.5版中的新功能。
with语句用于包装块的执行 由上下文管理器定义的方法(请参阅With Statement部分 上下文管理器)。这允许常见的尝试......除了...最终用法 要封装的模式以便于重用。
with_stmt ::= "with" with_item ("," with_item)* ":" suite
with_item ::= expression ["as" target]