writer.writerow不是写在for循环
问题描述:
请看看下面的伪多个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 loop
或main()
的任何内容?
答
一个简单的解决方法是将文件句柄而不是名称传递给FUNCTION。由于该文件已在主被打开,你并不需要/想要的名字在子程序,只需将文件句柄所以更改呼叫FUNCTION(writer)
和定义
def FUNCTION(writer):
,并使用writer.writerow(xxx)
无论你需要在子例程中输出流。
注意:您在示例中将文件指针的名称从writer
更改为write
。
答
我认为可能的原因是你没有关闭文件指针。您可以使用上下文管理器,如:
with open(filename, 'wt', encoding = 'utf-8') as f:
writer = csv.writer(f)
...
FUNCTION (query)
这将帮助您自动关闭文件。
+0
不,它仍然不工作... – user815408
工程像魔术!对我来说,这是一个很酷的教训,学习通过文件句柄! – user815408