Найти - Пользователи
Полная версия: экспорт csv файла, проблема с русскими буквами
Начало » Python для новичков » экспорт csv файла, проблема с русскими буквами
1
xenon
Здравствуйте все!
Выполняю пример из умной книжки, необходимо экспортировать csv файл, по хитрому обработать его и залить результат в БД, но оказалось не все так просто. Понимаю, что возникает проблема с кодировками, но не могу понять почему???
def insert_csvfile():
import calendar, csv, codecs
import psycopg2
db=psycopg2.connect("host='localhost' dbname='tvprogram' user='postgres' password='abcd'") # коннеект с БД
cu=db.cursor()
'''
with codecs.open('tv.csv','rb', encoding='windows-1251') as input_file: # перекодировка "на лету"
for line in input_file:
print type(line), line
'''

with codecs.open('tv.csv','rb', encoding='windows-1251') as input_file:
rdr=csv.DictReader(input_file,fieldnames=['begt','channel','prname','prgenre','endt'])
for rec in rdr:
bd, bt=rec['begt'].split()
bdd, bdm, bdy=map(int, bd.split('.'))
bth, btm=map(int,bt.split('.'))
eth, etm=map(int, rec['endt'].split('.'))
rec['wd']=calendar.weekday(bdy, bdm, bdd)
rec['begd']=db.Date(bdy, bdm, bdd)
rec['begt']=db.Time(bth,bdm,0)
rec['endt']=db.Time(eth,etm,0)

cu.execute(''' INSERT INTO tv (tvdate, tvweekday, tvchannel,
tvtime1, tvtime2, prname, prgenre
VALUES (%(begd)s, %(wd)s, %(channel)s, %(begt)s, %(endt)s,
%(prname)s, %(prgenre)s); ''', rec)

db.commit()
db.close()
Вот содержание самого csv файла, кодировка у файла ANSI:
10.02.2003 9.00;ОРТ;Новости;Новости;9.15
10.02.2003 9.15;ОРТ;“НЕЖНЫЙ ЯД”;Сериал;10.15
10.02.2003 10.15;ОРТ;“Маски-шоу”;Юмористическая программа;10.45
10.02.2003 10.45;ОРТ;“Человек и закон”;;11.30
10.02.2003 11.30;ОРТ;“НОВЫЕ ПРИКЛЮЧЕНИЯ СИНДБАДА”;Сериал;12.00

Вылезает ошибка:
Traceback (most recent call last):
File “C:\Python27\create_tabl_db.py”, line 107, in <module>
insert_csvfile()
File “C:\Python27\create_tabl_db.py”, line 88, in insert_csvfile
for rec in rdr:
File “C:\Python27\lib\csv.py”, line 104, in next
row = self.reader.next()
UnicodeEncodeError: ‘ascii’ codec can't encode characters in position 16-18: ord
inal not in range(128)

Посчитал позиции 16-18 - это как русские буквы … вот что-то с ними не так :-(
Подскажите пожалуйста в чем проблема, а то я дальше в учебе не продвинусь :-(
ЗАранее большое спасибо!!!
vv
имею такую же проблему.
для одного проекта надо парсить csv с сводками погоды, где направление ветра написано русскими буквами
“Северный”, “Южный” и т.д.

перепробвал массу комбинаций с unicode, decode, encode. результат никакой. вроде уже юникод, а потом всеравно ругается как и у Вас


в итоге решил проблему костылем:

“Северный”, “Южный” и др. находил в виде ‘\xd1\xe5\xe2\xe5\xf0\xed\xfb\xe9’, ‘\xde\xe6\xed\xfb\xe9’ и т.д. и налету заменял на латинские “N”, “S” и т.д. а потом уже с ними работал….

может найдете чего интересного здесь: http://habrahabr.ru/blogs/python/135913/
o7412369815963
> encoding='windows-1251'
Попробуйте: encoding='cp1251'
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB