Python - разделенная строка, содержащая '\ x'

1

Я хочу только номер здесь, который находится в научной нотации. Ниже представлен вывод интерпретатора 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
    Вы говорите, что строка не всегда одинакова, но суффикс всегда одинаков?
  • 0
    Нет, суффикс не всегда одинаков.
Показать ещё 3 комментария
Теги:
split

5 ответов

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
2

split не работает, потому что строка не содержит обратную косую черту. \xef представляет собой один символ, шестнадцатеричный код которого равен 0xEF. Python-интерпретатор просто красиво печатает строку для вас.

Решение зависит от того, какие символы могут появляться и что не может. Один пример:

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

Вам нужно либо разбить символ \xef

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

или вам нужно использовать строковый литерал:

x = [r' 1.9580000000000002E-05\xef\xbb\xbf\r\n']
x[0].split('\\')
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'
1

Если это научная нотация и количество мест будет одинаковым до \xef\xbb\xbf\r\n то это должно сделать трюк.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню