请查看下面的伪代码:
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()
相关的任何内容?
答案 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)
将帮助您自动关闭文件。