Python 读取时删除了带有奇怪 ^T 分隔符的文本日志

Text logs with strange ^T delimiter being removed on read by Python

我有一些带有奇怪分隔符的日志,示例行在这里:

SomeMoreData^TSomeData^TSomeValue

以下 sed 命令在 CLI 中运行,可将其替换为更有用的选项卡:

cat -A logs.txt | sed 's,\^T,\t,g'

在 Whosebug 上粘贴实际行时删除分隔符: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

而不是我需要的:

SomeMoreData\tSomeData\tSomeValue

我查看了 import io 并尝试了 UTF-8,效果相同,有人遇到过这个问题吗?

^TASCII control code,十六进制值为 0x14。试试运行下面的代码自己观察一下:

str = "SomeMoreDataSomeDataSomeValue"
list(map(lambda c: hex(ord(c)), str))

我猜不出为什么你的日志中会有那个值,但你可以让你的 python 代码与此一起工作:

logs = [line.replace('\x14', '\t') for line in f]