Python 当我写入CSV文件时,它只写入第二次

Python 当我写入CSV文件时,它只写入第二次,python,csv,Python,Csv,我正在学习过程中,我面临着这个问题 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,但没有写入任

我正在学习过程中,我面临着这个问题

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为单位的值!
我哪里出错了?请告诉我。

可能是您的sql第一次返回空字符串?csv模块没有问题,只需使用您的第一行和最后一行,而不是cur_baseboard,写一个随机文本,您就会发现它总是会被写入。

可能是您的sql第一次返回空字符串?csv模块没有问题,只需使用第一行和最后一行,而不是cur_baseboard,写一个随机文本,您会发现它总是会被写入。

您没有在最后关闭基础文件,因此数据不会被刷新。此外,您应该使用b标志来确保文件以二进制模式打开。使用:


您没有在最后关闭基础文件,因此不会刷新数据。此外,您应该使用b标志来确保文件以二进制模式打开。使用:


您可能希望使用with语句来确保所有内容都在完成后立即写入fileobj

with open('db.csv','wb') as fi:
    writer = csv.writer(fi)
当然,在早期的一些python中,您不会有with,但是您可以在将来导入它

from __future__ import with_statement

编辑:更改为以二进制模式打开,感谢您指出这一点。

您可能希望使用with语句来确保完成后所有内容都会写入fileobj

with open('db.csv','wb') as fi:
    writer = csv.writer(fi)
当然,在早期的一些python中,您不会有with,但是您可以在将来导入它

from __future__ import with_statement

编辑:更改为以二进制模式打开,感谢您指出。

可能写操作已缓冲,请在writerows之后尝试del-writer。可能写操作已缓冲,请在writerows之后尝试del-writer。处理文件的错误方法,请参阅我的答案。哪个答案?还有,这两种方式中的哪一种?从未来的进口。。。自从Python 2.6以来,就没有必要使用with。使用上下文管理的第二个版本很好,只是您确实需要在Python<2.6中进行将来的导入。我想我实际上会删除第一个版本。遗憾的是,有些人仍然需要使用2.6版之前的python,所以我将在导入时离开。处理文件的糟糕方式,请参阅我的答案。哪个答案?还有,这两种方式中的哪一种?从未来的进口。。。自从Python 2.6以来,就没有必要使用with。使用上下文管理的第二个版本很好,只是您确实需要在Python<2.6中进行将来的导入。我想我实际上会删除第一个版本。遗憾的是,有些人仍然需要使用2.6版之前的python,所以我将在导入时离开。以二进制模式打开文件!完成。感谢您指出,我已经有一段时间没有使用csv了。请以二进制模式打开文件!完成。感谢您指出,我已经有一段时间没有使用csv了。