2013-11-18 1 views
0

я использую XPath, чтобы очистить некоторые данные веб-страницы .. результат выглядит следующим образомизвлечения целочисленных данных из строки в списке

['\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', u'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tRs\xa021790 \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', '\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', u'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tRs\xa023851\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', '\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', u'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tRs\xa023905\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', '\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', u'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tRs\xa026570\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'] 

теперь мне нужно извлечь только целые числа из записей в списке (если присутствует еще 0) ..

предполагаемый выход:

[0, 21790, 0, 23851, 0, 23905, 0, 26570] 

Я избегаю 'регулярное выражение' или каких-либо дополнительных модулей.

+2

Если вы избегаете регулярное выражение почему вы отметите это как регулярное выражение? – OGHaza

+0

Ваш результат не соответствует тому, что вы описываете, ваш ввод должен производить, и в вашем вводе также нет начальных нулей. Я ожидаю, что вместо этого создадим '[0, 21790, 0, 23851, 0, 23905, 0, 26570 ]''. –

+0

@MartijnPieters да, вы правы! –

ответ

4

Вы должны стирают пробелы, а затем вы можете разделить на \xa0 неразрывный пробел:

[0 if not v.strip() else int(v.strip().split()[-1]) for v in inputlist] 

Демо:

>>> inputlist = ['\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', u'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tRs\xa021790 \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', '\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', u'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tRs\xa023851\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', '\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', u'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tRs\xa023905\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', '\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', u'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tRs\xa026570\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'] 
>>> [0 if not v.strip() else int(v.strip().split()[-1]) for v in inputlist] 
[0, 21790, 0, 23851, 0, 23905, 0, 26570] 

Это использует list comprehension для перебора значений , с str.strip(), чтобы удалить пробелы (все вкладки и возврат каретки) и str.split(), чтобы разделить оставшуюся строку на пробелы (где \xa0 также является пробелом).

+0

он работает правильно. Не могли бы вы объяснить код и обратиться ко мне за любой тет/книгу для работы с основным списком вроде этого .. в одной строке (новичок на python) –

+1

@Code_reaper: я связан с документацией по конкретным используемым методам Вот; нет ни одного учебника, который бы преподавал эти методы в компактной манере, я не думаю. Вы можете попробовать различные методы в командной строке Python; попробуйте их на отдельных элементах и ​​посмотрите, что возвращается, например, чтобы дать вам представление о том, что делает каждый шаг. –

2

Вы также можете сделать это с одним map и filter:

>>> l = ['\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', u'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tRs\xa021790 \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', '\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', u'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tRs\xa023851\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', '\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', u'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tRs\xa023905\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', '\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t', u'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tRs\xa026570\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'] 
>>> map(int, (filter(lambda x: x.isdigit(), s) or '0' for s in l)) 
[0, 21790, 0, 23851, 0, 23905, 0, 26570]