Python - разделенная строка, содержащая '\ x' - PullRequest
1 голос
/ 01 сентября 2011

Я хочу только число здесь, которое находится в научной записи.Ниже приведен вывод интерпретатора 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 ]

5 голосов
/ 01 сентября 2011
>>> 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 голосов
/ 01 сентября 2011

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

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

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

x = [r' 1.9580000000000002E-05\xef\xbb\xbf\r\n']
x[0].split('\\')
2 голосов
/ 01 сентября 2011

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

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

>>> ' 1.9580000000000002E-05\xef\xbb\xbf\r\n'.strip('\xef\xbb\xbf\r\n ')
'1.9580000000000002E-05'
2 голосов
/ 01 сентября 2011
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 голос
/ 01 сентября 2011

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

>>> x[:22]
'1.9580000000000002E-05'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...