Python - 拆分包含 '\x' 的字符串

1 投票
5 回答
3525 浏览
提问于 2025-04-17 01:01

我只想要这里的数字,它是用科学计数法表示的。下面的输出是从终端中得到的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

不过,根据你文本的编码方式以及你获取数据的来源,这种做法可能更“正确”:

撰写回答