我正在使用float(x)
将字符串转换为浮点数。但是,由于某些原因,字符串之一是"71.2\x0060"
。我已尝试遵循此answer,但不会删除字节字符
>>> s = "71.2\x0060"
>>> "".join([x for x in s if ord(x) < 127])
'71.2\x0060'
我尝试过的其他方法是:
>>> s.split("\\x")
['71.2\x0060']
>>> s.split("\x")
ValueError: invalid \x escape
我不确定为什么该字符串的格式不正确,但是我想从此字符串中获得尽可能高的精度并继续前进。
答案 0 :(得分:0)
根据wim的评论,答案可能是这样:
>>> s.split("\x00")
['71.2', '60']
所以我应该这样做:
>>> float(s.split("\x00")[0])
71.2
答案 1 :(得分:0)
很遗憾,\p{XDigit}
模块中不存在POSIX组re
。无论如何要删除带有正则表达式的十六进制控制字符,您可以尝试以下操作。
impore re
re.sub(r'[\x00-\x1F]', r'', '71.2\x0060') # or:
re.sub(r'\\x[0-9a-fA-F]{2}', r'', r'71.2\x0060')
输出:
'71.260'
'71.260'
r
表示原始。在ASCII表中查看最大为十六进制1F的控制字符:https://www.torsten-horn.de/techdocs/ascii.htm