Текстовые журналы со странным разделителем ^T удаляются при чтении Python

#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. Я тоже не могу понять, почему! Но с положительной стороны ваше предложение сработало.