Я хочу только номер здесь, который находится в научной нотации. Ниже представлен вывод интерпретатора Python из терминала. Как бы это сделать.
Добавленная информация: строка не всегда одинаковой длины, поэтому нет символа. длинные ярлыки... Суффикс также не всегда одинаковый.
>>> x
[' 1.9580000000000002E-05\xef\xbb\xbf\r\n']
>>> x[0].split('\\')
[' 1.9580000000000002E-05\xef\xbb\xbf\r\n']
>>>
Желаемый результат:
1.9580000000000002E-05
>>> 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
split
не работает, потому что строка не содержит обратную косую черту. \xef представляет собой один символ, шестнадцатеричный код которого равен 0xEF. Python-интерпретатор просто красиво печатает строку для вас.
Решение зависит от того, какие символы могут появляться и что не может. Один пример:
>>> ' 1.9580000000000002E-05\xef\xbb\xbf\r\n'.strip('\xef\xbb\xbf\r\n ')
'1.9580000000000002E-05'
Вам нужно либо разбить символ \xef
x[0].split('\xef')
или вам нужно использовать строковый литерал:
x = [r' 1.9580000000000002E-05\xef\xbb\xbf\r\n']
x[0].split('\\')
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'
Если это научная нотация и количество мест будет одинаковым до \xef\xbb\xbf\r\n
то это должно сделать трюк.
>>> x[:22]
'1.9580000000000002E-05'