Форум сайта python.su
doza_and
Я бы уже давно так сделал, но в этом и проблема. При попытке перекодировать в ср1251 при последующем открытии в кодировке 1251 выпадает ошибку и говорит, что не может прочитать какие-то символы.
Офлайн
Не знаю зачем вам это нужно, но и у encode и у decode есть параметр errors, если его установить в ‘ignore’, то символы, которых нет в выбранной кодировке будут пропускаться.
Офлайн
PooHкстати да, совсем забыл
Не знаю зачем вам это нужно, но и у encode и у decode есть параметр errors, если его установить в ‘ignore’, то символы, которых нет в выбранной кодировке будут пропускаться.
f = open('1.txt') txt = f.read().decode('utf-8',errors='ignore') f.close() f = open('2.txt','w') f.write(txt.encode('cp1251')) f.close()
Офлайн
PooH
vic57
Попробовал. Ничего не помогло. Считать получилось, но после того как начинаю парсить файл, применяя регулярку, начинает ругаться на то, что встретил непонятный символ.
Не знаю что делать с эим файлом.
Суть в том, что что мне надо отпарсить файл (получить телефон, адрес, время) но из-за этой кодировки ничего не получается.
Есть идеи?
Офлайн
Ещё раз повторяю: у тебя бинарный файл и парсить его нужно как бинарник. Я бы на твоём месте попытался бы это сделать через http://kaitai.io/
Офлайн
nik.iwan2017дык покажи свой код и ашипки. накостылить всяко можно
Есть идеи?
#!/usr/bin/env python # -*- coding:utf-8 -*- import re f = open('1.txt') txt = f.read().decode('utf-8',errors='ignore') f.close() lst = re.findall("[+\d]+",txt) for i in lst: if i.startswith('+'):print i
Отредактировано vic57 (Июнь 20, 2017 12:21:41)
Офлайн
nik.iwan2017Сдается мне вы в трех соснах заблудились. Когда открываете для поиска регуляркой кодировку указываете? А лучше скажите задачу целиком, что выдрать оттуда хотите?
Суть в том, что что мне надо отпарсить файл (получить телефон, адрес, время) но из-за этой кодировки ничего не получается.
Есть идеи?
Офлайн
RodegastНу если человеку нужно только выдрать текст, то возможно нет смысла разбирать неизвестный формат. Не зря же существуют утилитки типа strings.
Ещё раз повторяю: у тебя бинарный файл и парсить его нужно как бинарник. Я бы на твоём месте попытался бы это сделать через http://kaitai.io/
Офлайн
Там бинарный файл, в котором впермешку с данными есть строки в utf-8.
Нужно их прочитать в бинарном виде и раскодировать из utf-8 в unicode, а потом символы из unicode закодировать в бинарный вид в cp1251.
#!/usr/bin/env python3
with open('1.5', 'rb') as fin:
data = fin.read()
text = data.decode('utf-8', 'ignore')
out = text.encode('cp1251', 'ignore')
with open('1.5.out', 'wb') as fout:
fout.write(out)
Отредактировано py.user.next (Июнь 20, 2017 06:22:54)
Офлайн
PooHпоходу ТС не врубается, что питон в юникоде работает
Сдается мне вы в трех соснах заблудились.
#!/usr/bin/env python # -*- coding:utf-8 -*- import re f = open('1.5') txt = f.read().decode('utf-8',errors='ignore') f.close() lst = txt.split('"}') for i in lst: print '*new line' l = re.findall(ur'[а-яА-Я0-9+(){}"|;:., ]+',i) print ' '.join(l) + '"}'
Отредактировано vic57 (Июнь 20, 2017 14:38:15)
Офлайн