我正处于学习过程中,我遇到了这个问题..
writer = csv.writer(open("db.csv", "w"))
connection = sqlite3.connect('hx.db')
cur_baseboard = connection.cursor()
cur_baseboard.execute('select * from baseboard')
writer.writerows(cur_baseboard)
当我运行此代码时,它第一次创建csv文件db.csv,但没有写入任何内容。 在我第二次运行它之后,它会填充db中的值! 我哪里出错了?拜托,赐教。
答案 0 :(得分:3)
您最后没有关闭底层文件,因此数据不会被刷新。此外,您应使用“b”标志以确保以二进制模式打开文件。 (http://docs.python.org/library/csv.html#csv.writer)使用:
from __future__ import with_statement
with open("db.csv", "wb") as f:
writer = csv.writer(f)
[...]
# File is closed automatically after end of with block.
答案 1 :(得分:1)
您可能希望使用with语句来确保一旦完成就将所有内容写入fileobj。
with open('db.csv','wb') as fi:
writer = csv.writer(fi)
当然,你不会在一些早期的蟒蛇中使用,但你可以随时将其导入
from __future__ import with_statement
编辑:更改为以二进制模式打开,感谢您指出。
答案 2 :(得分:0)
也许你的sql第一次返回一个空字符串?这不是csv模块的问题,只需使用你的第一行和最后一行,而不是cur_baseboard
,写一个随机文本,你会发现它总是会写。