如何用Python在二进制文件中查找浮点数?

时间:2016-04-14 08:57:00

标签: python regex python-3.x binary floating-point

我有一个混合了ASCII的二进制文件,其中有一些我想要找到的浮点数。该文件包含一些这样的行:

1,1,'11.2','11.3';1,1,'100.4';

在我最喜欢的正则表达式测试器中,我发现正确的正则表达式应该是([0-9]+\.{1}[0-9]+)

以下是代码:

import re

data = open('C:\\Users\\Me\\file.bin', 'rb')
pat = re.compile(b'([0-9]+\.{1}[0-9]+)')
print(pat.match(data.read()))

我没有得到一场比赛,为什么?我在使用Python 3.5.1。

2 个答案:

答案 0 :(得分:2)

你可以这样试试,

import re
with open('C:\\Users\\Me\\file.bin', 'rb') as f:
    data = f.read()

re.findall("\d+\.\d+", data)

<强>输出

['11.2', '11.3', '100.4']

re.findall返回string列表。如果你想转换为float你可以这样做

>>> list(map(float, re.findall("\d+\.\d+", data)))
[11.2, 11.3, 100.4]

答案 1 :(得分:2)

  

如何使用Python在二进制文件中查找浮点数?

float_re = br"[+-]? *(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?"
for m in generate_tokens(r'C:\Users\Me\file.bin', float_re):
    print(float(m.group()))

其中float_re is from this answergenerate_tokens() is defined here

pat.match()尝试在输入字符串的最开头匹配,并且您的字符串不以float开头,因此您&#34;不会获得单个匹配&#34;

re.findall("\d+\.\d+", data)生成TypeError,因为该模式是Unicode(str),但data是您案例中的bytes对象。将模式传递为bytes
re.findall(b"\d+\.\d+", data)