Python - 拆分包含 '\x' 的字符串
我只想要这里的数字,它是用科学计数法表示的。下面的输出是从终端中得到的Python解释器的输出。我该怎么做才能得到这个数字呢?
补充说明:这个字符串的长度并不总是相同,所以不能用字符长度的捷径……后缀也不总是一样的。
>>> x
[' 1.9580000000000002E-05\xef\xbb\xbf\r\n']
>>> x[0].split('\\')
[' 1.9580000000000002E-05\xef\xbb\xbf\r\n']
>>>
想要的输出:
1.9580000000000002E-05
5 个回答
2
import string
input = ' 1.9580000000000002E-05\xef\xbb\xbf\r\n'
filter(lambda x: x in string.printable, input).strip()
float(filter(lambda x: x in string.printable, input).strip())
也许这能帮助你理解你的输入:
>>> for i in input: print i, repr(i)
...
' '
1 '1'
. '.'
9 '9'
5 '5'
8 '8'
0 '0'
0 '0'
0 '0'
0 '0'
0 '0'
0 '0'
0 '0'
0 '0'
0 '0'
0 '0'
0 '0'
0 '0'
2 '2'
E 'E'
- '-'
0 '0'
5 '5'
∩ '\xef'
╗ '\xbb'
┐ '\xbf'
'\r'
'\n'
2
split
方法不管用是因为这个字符串里没有反斜杠。 \xef 代表的是一个符号,它的十六进制代码是 0xEF。Python 解释器只是把这个字符串以好看的方式展示给你。
解决办法取决于哪些字符可以出现,哪些不可以。这里有一个例子:
>>> ' 1.9580000000000002E-05\xef\xbb\xbf\r\n'.strip('\xef\xbb\xbf\r\n ')
'1.9580000000000002E-05'
6
>>> import re
>>> x = [' 1.9580000000000002E-05\xef\xbb\xbf\r\n']
>>> float(re.search(r'\d\.\d*E[+-]\d+',x[0]).group())
1.9580000000000002e-05
>>> float(x[0].decode('utf8').encode('ascii', 'ignore').strip())
1.9580000000000002e-05
不过,根据你文本的编码方式以及你获取数据的来源,这种做法可能更“正确”: