При импорте данных из плоского файла я заметил некоторые встроенные шестнадцатеричные значения в строке (<0x00>
, <0x01>
).
Я хочу заменить их конкретными символами, но не могу этого сделать.Удаление их тоже не сработает.Как это выглядит в экспортированном плоском файле: https://i.imgur.com/7MQpoMH.png Другой пример: https://i.imgur.com/3ZUSGIr.png
Это то, что я пробовал: (и обратите внимание, <0x01>
представляет не-редактируемая сущность. Здесь она не распознается.)
import io
with io.open('1.txt', 'r+', encoding="utf-8") as p:
s=p.read()
# included in case it bears any significance
import re
import binascii
s = "Some string with hex: <0x01>"
s = s.encode('latin1').decode('utf-8')
# throws e.g.: >>> UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfc in position 114: invalid start byte
s = re.sub(r'<0x01>', r'.', s)
s = re.sub(r'\\0x01', r'.', s)
s = re.sub(r'\\\\0x01', r'.', s)
s = s.replace('\0x01', '.')
s = s.replace('<0x01>', '.')
s = s.replace('0x01', '.')
или что-то в этом духе в надежде понять его, перебирая всю строку:
for x in s:
try:
base64.encodebytes(x)
base64.decodebytes(x)
s.strip(binascii.unhexlify(x))
s.decode('utf-8')
s.encode('latin1').decode('utf-8')
except:
pass
Кажется, ничего не получается сделать.
Я бы ожидал, что символы будут заменены методами, которые я выкопал, но это не так.Что мне не хватает?NB. Я должен сохранить умляуты (äöüÄÖÜ)
- редактировать:
Могу ли я сначала ввести шестнадцатеричные значения при экспорте?Если так, есть ли способ избежать этого?
with io.open('out.txt', 'w', encoding="utf-8") as temp:
temp.write(s)