Форум сайта python.su
Возникла необходимость сгенерировать файл xls из csv не думал, что возникнут такие проблемы. Делаю через xlwt :
данные в файле csv находятся в кодировке cp1251.
import csv, xlwt with open('outlets.csv') as csvfile: reader = csv.reader(csvfile, delimiter=';', quotechar='"') wbk= xlwt.Workbook() sheet = wbk.add_sheet('Sheet1') for rowi, row in enumerate(reader): for coli, value in enumerate(row): sheet.write(rowi, coli, value) wbk.save('out.xls')
import csv, xlwt with open('outlets.csv') as csvfile: reader = csv.reader(csvfile, delimiter=';', quotechar='"') wbk= xlwt.Workbook() sheet = wbk.add_sheet(u'Sheet1') for rowi, row in enumerate(reader): for coli, value in enumerate(row): value = value.decode('cp1251') sheet.write(rowi, coli, value) wbk.save('out.xls')
Отредактировано vOROn200 (Дек. 17, 2015 23:07:04)
Офлайн
на первый взгляд напрашивается сразу задать кодировку файла при открывании
open('outlets.csv',encoding="cp1251")
Офлайн
увы, с encoding код тоже приводит к аналогичному результату
import csv, xlwt with open('outlets.csv', encoding="cp1251") as csvfile: reader = csv.reader(csvfile, delimiter=';', quotechar='"') wbk= xlwt.Workbook() sheet = wbk.add_sheet('Sheet1') for rowi, row in enumerate(reader): for coli, value in enumerate(row): sheet.write(rowi, coli, value) wbk.save('out.xls')
Отредактировано vOROn200 (Дек. 17, 2015 23:08:26)
Офлайн
sheet = wbk.add_sheet(u'Sheet1')
Отредактировано 4kpt_III (Дек. 17, 2015 22:57:37)
Офлайн
4kpt_IIIупс.. очепятался. поправил в сообщении
python3? realy?
Отредактировано vOROn200 (Дек. 17, 2015 23:08:10)
Офлайн
Попробывал перевести данные в utf8 с cp1251 результат такой же:
Код и данные в utf8 с bom и без
import csv, xlwt with open('outlets-utf8.csv', encoding="utf8") as csvfile: reader = csv.reader(csvfile, delimiter=';', quotechar='"') wbk= xlwt.Workbook() sheet = wbk.add_sheet('Sheet1') for rowi, row in enumerate(reader): for coli, value in enumerate(row): sheet.write(rowi, coli, value) wbk.save('out.xls')
Офлайн
Это какой-то внутренний глюк xlwt.
Там записи, которые ломаются, можно вынести в отдельный файл - и они пишутся нормально, а если вместе собрать - пишутся ненормально.
Отредактировано py.user.next (Дек. 18, 2015 02:22:51)
Офлайн
vOROn200, возьмите старый пакет xlwt3, с ним работает.
Только надо в седьмой строке файла formula.py удалить “__init__” из __slots__.
Офлайн
У меня вот так все работает:
import csv import xlwt with open('outlets.csv', encoding="windows-1251") as csvfile: reader = csv.reader(csvfile, delimiter=';', quotechar='"') wbk = xlwt.Workbook() sheet = wbk.add_sheet('Sheet1') for rowi, row in enumerate(reader): for coli, value in enumerate(row): sheet.write(rowi, coli, value) wbk.save('out.xls')
Офлайн