【发布时间】:2012-11-29 21:14:52
【问题描述】:
问题如下:
我正在做一个 file.read(100) 并得到如下的一行:
line='1\x01\x1e17=00000000\x1e54=80300A00\x1e50=1\x1e56=2008080106010414\x1c\x1e247=CD\x1e6=In\x1e5=Boot\x1e180=0.445\x1e179=0.380\x1e55=AAA\x1e57=2008080100000000\x1e212=5000\x1e213=20000\x1e115=500\x1d\x1e29=5T2lqZHNAwg=\x01\x1e17=00000000'
我想要做的是在这一行中搜索十六进制数字并将它们转换为输出新操作的行。
所以基本上我想做:
t=re.findall(r'[\x80-\xff]', line) #Somehow get the positions
for i in t: ord(i) #Something to this effect to replace all the hexadecimals it finds
使用我为 t 提供的代码,我找不到行中的所有字符,更不用说它们的位置了。
我想知道是否有人对如何最好地解决这个问题有任何想法。谢谢。
【问题讨论】:
-
我认为您需要备份一个步骤并询问该输入是否有意义。在我看来,您正在尝试使用不正确的编码读取文件。
-
该文件是 .dat.gz 在 UNIX 中读取它有很多特殊字符,如 ^^ 等...我知道读取它的唯一方法是简单地使用 gzip 并进行读取.你对编码还有什么想法吗?
-
您正在寻找
\x80-\xff范围内的字符,但您的字符串中的字符在\x01-\x1f范围内。我不确定正则表达式解析器将如何处理这些,但这是一个开始的地方。 -
@FancyDolphin 阅读了 kreativitea 的回答。这是对我在说什么的更好的解释。关于编码问题,我只知道我对编码问题一无所知。