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

时间:2011-09-01 06:10:58

标签: python split

我只想要这里用科学记数法表示的数字。下面的输出是Terminal的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 个答案:

答案 0 :(得分:5)

>>> 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

答案 1 :(得分: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 :(得分:2)

split不起作用,因为该字符串不包含反斜杠。 \ xef表示十六进制代码为0xEF的单个符号。 Python解释器只是为你打印字符串。

解决方案取决于哪些角色可以出现,哪些角色无法出现。一个例子:

>>> ' 1.9580000000000002E-05\xef\xbb\xbf\r\n'.strip('\xef\xbb\xbf\r\n ')
'1.9580000000000002E-05'

答案 3 :(得分:2)

您需要拆分角色\xef

x[0].split('\xef')

或者您必须使用原始字符串文字:

x = [r' 1.9580000000000002E-05\xef\xbb\xbf\r\n']
x[0].split('\\')

答案 4 :(得分:1)

如果它是科学记数法,并且\xef\xbb\xbf\r\n之前的位数将会相同,那么这应该可以解决问题。

>>> x[:22]
'1.9580000000000002E-05'