我有一个混合了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。
答案 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 answer和generate_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)