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 loop
或 main()
相关的内容?
我认为可能的原因是您没有关闭文件指针。您可以像这样使用上下文管理器:
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
。
请看下面的伪代码:
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 loop
或 main()
相关的内容?
我认为可能的原因是您没有关闭文件指针。您可以像这样使用上下文管理器:
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
。