Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 1, 2012 15:21:21

xenon
От:
Зарегистрирован: 2010-12-03
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

экспорт csv файла, проблема с русскими буквами

Здравствуйте все!
Выполняю пример из умной книжки, необходимо экспортировать 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 - это как русские буквы … вот что-то с ними не так :-(
Подскажите пожалуйста в чем проблема, а то я дальше в учебе не продвинусь :-(
ЗАранее большое спасибо!!!



Мыши плакали, кололись, но продолжали жрать кактус …

Отредактировано (Фев. 1, 2012 15:24:10)

Офлайн

#2 Фев. 15, 2012 09:51:53

vv
От:
Зарегистрирован: 2011-09-16
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

экспорт csv файла, проблема с русскими буквами

имею такую же проблему.
для одного проекта надо парсить 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)

Офлайн

#3 Фев. 15, 2012 16:18:43

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

экспорт csv файла, проблема с русскими буквами

> encoding='windows-1251'
Попробуйте: encoding='cp1251'

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version