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,效果相同,有人遇到过这个问题吗?
^T
是 ASCII control code,十六进制值为 0x14
。试试运行下面的代码自己观察一下:
str = "SomeMoreDataSomeDataSomeValue"
list(map(lambda c: hex(ord(c)), str))
我猜不出为什么你的日志中会有那个值,但你可以让你的 python 代码与此一起工作:
logs = [line.replace('\x14', '\t') for line in f]
我有一些带有奇怪分隔符的日志,示例行在这里:
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,效果相同,有人遇到过这个问题吗?
^T
是 ASCII control code,十六进制值为 0x14
。试试运行下面的代码自己观察一下:
str = "SomeMoreDataSomeDataSomeValue"
list(map(lambda c: hex(ord(c)), str))
我猜不出为什么你的日志中会有那个值,但你可以让你的 python 代码与此一起工作:
logs = [line.replace('\x14', '\t') for line in f]