Найти - Пользователи
Полная версия: Кодировка файлов. Пожалуйста помогите!
Начало » Python для новичков » Кодировка файлов. Пожалуйста помогите!
1 2 3
nik.iwan2017
doza_and
Я бы уже давно так сделал, но в этом и проблема. При попытке перекодировать в ср1251 при последующем открытии в кодировке 1251 выпадает ошибку и говорит, что не может прочитать какие-то символы.
PooH
Не знаю зачем вам это нужно, но и у encode и у decode есть параметр errors, если его установить в ‘ignore’, то символы, которых нет в выбранной кодировке будут пропускаться.
vic57
PooH
Не знаю зачем вам это нужно, но и у encode и у decode есть параметр errors, если его установить в ‘ignore’, то символы, которых нет в выбранной кодировке будут пропускаться.
кстати да, совсем забыл
nik.iwan2017, попробуй
 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()

nik.iwan2017
PooH
vic57
Попробовал. Ничего не помогло. Считать получилось, но после того как начинаю парсить файл, применяя регулярку, начинает ругаться на то, что встретил непонятный символ.
Не знаю что делать с эим файлом.
Суть в том, что что мне надо отпарсить файл (получить телефон, адрес, время) но из-за этой кодировки ничего не получается.
Есть идеи?
Rodegast
Ещё раз повторяю: у тебя бинарный файл и парсить его нужно как бинарник. Я бы на твоём месте попытался бы это сделать через http://kaitai.io/
vic57
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
у меня это работает

PooH
nik.iwan2017
Суть в том, что что мне надо отпарсить файл (получить телефон, адрес, время) но из-за этой кодировки ничего не получается.
Есть идеи?
Сдается мне вы в трех соснах заблудились. Когда открываете для поиска регуляркой кодировку указываете? А лучше скажите задачу целиком, что выдрать оттуда хотите?
PooH
Rodegast
Ещё раз повторяю: у тебя бинарный файл и парсить его нужно как бинарник. Я бы на твоём месте попытался бы это сделать через http://kaitai.io/
Ну если человеку нужно только выдрать текст, то возможно нет смысла разбирать неизвестный формат. Не зря же существуют утилитки типа strings.
py.user.next
Там бинарный файл, в котором впермешку с данными есть строки в 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)

По пути можно и текст отфильтровать, пока он в unicode, иначе бинарные данные попадают в выход.
vic57
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) + '"}'
УМВР
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