python“with”命令和csv阅读器

时间:2012-05-17 19:17:29

标签: python csv

我有csv读者和作家。我知道你必须打开和关闭底层对象。一种方法是首先创建文件对象f,使用csv reader然后使用f.close()。

但是,我似乎无法做到以下几点:

with open(outputpath) as f_outputfile:

    outputfile = csv.writer(f_outputfile)

OTHER CODE HERE

我想要做的是立即打开一堆读者,同时打开一堆作者,让它们全部自动关闭。但是,这是否意味着我有一个嵌套的“With”块?

2 个答案:

答案 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]