Я участвую в процессе обучения и сталкиваюсь с этой проблемой.
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! Где я ошибся? Пожалуйста, просветите меня.
Вы не закрываете базовый файл в конце, поэтому данные не сбрасываются. Кроме того, вы должны использовать флаг "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.
Вы можете использовать оператор with, чтобы гарантировать, что все будет записано в fileobj, как только оно будет завершено.
with open('db.csv','wb') as fi:
writer = csv.writer(fi)
Конечно, у вас не будет с некоторыми из ранних питонов, но вы всегда можете импортировать его в будущем
from __future__ import with_statement
EDIT: Изменено для открытия в двоичном режиме, спасибо за указание на это.
Возможно, что ваш sql возвращается в пустую строку в первый раз? Это не проблема с модулем csv, просто используйте свою первую и последнюю строку, а вместо cur_baseboard
напишите случайный текст, и вы обнаружите, что он всегда будет написан.
del writer
послеwriterows
.