Форум сайта python.su
0
Здравствуйте все!
Выполняю пример из умной книжки, необходимо экспортировать 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()
Отредактировано (Фев. 1, 2012 15:24:10)
Офлайн
0
имею такую же проблему.
для одного проекта надо парсить 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/
Отредактировано (Фев. 15, 2012 09:54:23)
Офлайн
32
> encoding='windows-1251'
Попробуйте: encoding='cp1251'
Офлайн