writer.writerow 不适用于在 for 循环中写入多个 CSV

writer.writerow not work for writing multiple CSV in for loop

请看下面的伪代码:

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

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

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

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

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

def FUNCTION(writer):

并在子例程中需要流式输出的任何地方使用 writer.writerow(xxx)

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