#python-3.x #text #encoding #io #delimiter
#python-3.x #текст #кодирование #io #разделитель
Вопрос:
У меня есть несколько журналов со странным разделителем, пример строки здесь:
SomeMoreData^TSomeData^TSomeValue
Следующая команда sed работает в CLI, чтобы заменить ее чем-то более полезным, например табуляцией:
cat -A logs.txt | sed 's,^T,t,g'
При вставке фактической строки в stackoverflow удаляется разделитель: SomeMoreDataSomeDataSomeValue
То же самое происходит, когда я читаю файл с помощью Python, разделитель игнорируется и, таким образом, делает анализ журналов невозможным.
Вот мой код на python:
with open('logs.txt', 'r') as f:
logs = [line.replace(r'^T', r't') for line in f]
print(logs[0]) # to display the first log
Это выводит
SomeMoreDataSomeDataSomeValue
Вместо того, что мне нужно:
SomeMoreDatatSomeDatatSomeValue
Я посмотрел на импорт ввода-вывода и попробовал UTF-8 с тем же эффектом, кто-нибудь сталкивался с этой проблемой?
Ответ №1:
^T
представляет собой управляющий код ASCII с шестнадцатеричным значением 0x14
. Попробуйте выполнить следующий код, чтобы понаблюдать за этим самостоятельно:
str = "SomeMoreDataSomeDataSomeValue"
list(map(lambda c: hex(ord(c)), str))
Я не могу догадаться, зачем вам это значение в вашем журнале, но вы можете заставить свой код python работать с этим:
logs = [line.replace('x14', 't') for line in f]
Комментарии:
1. Я тоже не могу понять, почему! Но с положительной стороны ваше предложение сработало.