2017-04-23 44 views
1

请看看下面的伪多个CSV工作:writer.writerow不是写在for循环

def main(): 
    queries = ['A','B','C'] 
    for query in queries: 
     filename = query + '.csv' 
     writer = csv.writer(open(filename, 'wt', encoding = 'utf-8')) 
     ... 
     FUNCTION (query) 

def FUNCTION(query): 
    ... 
    writer.writerow(XXX) 

我想写信给多个CSV文件,所以我用for loop生成不同的文件名,然后写入另一个文件def()

但是,这是行不通的,该文件将是空的。

如果我试图摆脱使用main()或停止for loop

writer = csv.writer(open(filename, 'wt', encoding = 'utf-8')) 
     ... 
FUNCTION (query) 
def FUNCTION(query): 
     ... 
    writer.writerow(XXX) 

它会工作。

我不知道为什么?有关for loopmain()的任何内容?

回答

1

一个简单的解决方法是将文件句柄而不是名称传递给FUNCTION。由于该文件已在主被打开,你并不需要/想要的名字在子程序,只需将文件句柄所以更改呼叫FUNCTION(writer)和定义

def FUNCTION(writer):

,并使用writer.writerow(xxx)无论你需要在子例程中输出流。

注意:您在示例中将文件指针的名称从writer更改为write

+0

工程像魔术!对我来说,这是一个很酷的教训,学习通过文件句柄! – user815408

0

我认为可能的原因是你没有关闭文件指针。您可以使用上下文管理器,如:

with open(filename, 'wt', encoding = 'utf-8') as f: 
    writer = csv.writer(f) 
    ... 
    FUNCTION (query) 

这将帮助您自动关闭文件。

+0

不,它仍然不工作... – user815408