writer.writerow无法在for循环中编写多个CSV

时间:2017-04-23 04:21:39

标签: python function main writer

请查看下面的伪代码:

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()相关的任何内容?

2 个答案:

答案 0 :(得分:1)

一个简单的解决方法是将文件句柄而不是名称传递给FUNCTION。由于文件已在main中打开,因此您不需要/想要子例程中的名称,只需要文件句柄,因此将调用更改为FUNCTION(writer)并将定义更改为

def FUNCTION(writer):

并使用writer.writerow(xxx)在您需要的子流程中输出流量。

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

答案 1 :(得分:0)

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

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

将帮助您自动关闭文件。