我目前正在尝试以我通常无法执行的格式解析apache日志。(尝试使用goaccess)
在sublime it中,分隔符显示为ENQ、SOH和ETX,我的理解是“|”、空格和上标L重新分割把日志的各个组成部分分开,但我不知道如何处理带上标的L
在sublime上它显示为3286d68255beaf010000543a000012f1/Madonna_Home_1.jpgENQx628a135bENQZ1e5ENQAB50632SOHA50.134.214.130SOHC98.138.19.91SOHD42857ENQwwww.newprophecy.net...
当我在纯文本编辑器(如记事本)中打开文件时,ENQ为“|”,SOH为“”
我只需要解析出IP地址,这样剩下的部分基本上就不相关了。在
目前我有
pkts = re.split("\s|\\|")
但我不知道该怎么办
这些3个字母的代码是ASCII控制代码-这些是ASCII字符集中出现在32(空格字符)之前的ASCII字符。您可以找到a full list online。在
这些字符与任何可打印的字符不对应,因此假设它们对应于这些字符是不正确的。您可以使用
\x00
符号将它们称为几种语言中的文本—例如,控制代码ETX对应于\x03
(请参阅上面链接的参考)。你可以用这些来分割字符串或其他任何东西。在这是您问题的字面回答,但除此之外,我发现您不太可能需要使用控制代码来分割Apache日志文件。据猜测,实际发生的事情可能是som Unicode字符以某种方式悄悄地进入了日志文件,也许是UTF-8编码。编码是用多个字节编码扩展字符来表示超出单字节255限制的字符的一种方法。在
有几种编码方式,但UTF-8是最流行的编码方式之一。如果您使用UTF-8,它的特性是标准ASCII字符将正常显示(因此您可能永远不会意识到使用的是UTF-8),但是如果您在不支持UTF-8的编辑器中查看文件(或错误地将文件标识为纯ASCII),那么您将看到这些奇怪的控制代码。在这些地方,代码和代码前后的字符应该一起解释为一个单元。在
我不确定这是为什么,这只是一个有根据的猜测,但如果你还没有考虑过,那么找出你的文件编码是很重要的,因为它会影响你如何解释它的整个内容。我建议将该文件加载到一个能够理解编码的编辑器中(我确信在适当的配置下,Sublime会像Sublime一样流行),并强制将编码转换为UTF-8,看看这是否会使内容看起来更合理。在
相关问题 更多 >
编程相关推荐