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