У меня есть текстовый файл с URL-адресами, около 14000. Ниже приведены несколько примеров:
http://www.domainname.com/pagename?CONTENT_ITEM_ID=100¶m2=123
http://www.domainname.com/images?IMAGE_ID=10
http://www.domainname.com/pagename?CONTENT_ITEM_ID=101¶m2=123
http://www.domainname.com/images?IMAGE_ID=11
http://www.domainname.com/pagename?CONTENT_ITEM_ID=102¶m2=123
Я загрузил текстовый файл в список Python и пытаюсь выделить все URL-адреса с CONTENT_ITEM_ID в отдельный список. Как лучше всего сделать это в Python?
Ваше здоровье






list2 = filter( lambda x: x.find( 'CONTENT_ITEM_ID ') != -1, list1 )
Фильтр вызывает функцию (первый параметр) для каждого элемента списка list1 (второй параметр). Если функция возвращает истину (ненулевое значение), элемент копируется в выходной список.
Лямбда в основном создает временную безымянную функцию. Это просто для того, чтобы не создавать функцию, а затем передавать ее, например:
function look_for_content_item_id( elem ):
if elem.find( 'CONTENT_ITEM_ID') == -1:
return 0
return 1
list2 = filter( look_for_content_item_id, list1 )
Вот еще одна альтернатива Graeme's, использующая новый синтаксис понимания списка:
list2= [line for line in file if 'CONTENT_ITEM_ID' in line]
Что вы предпочтете - дело вкуса!
Мне понравился ответ @bobince (+1), но я подниму ставку.
Поскольку у вас довольно большой начальный набор, вы можете не загружать весь список в память. Если вам не нужен весь список для чего-то еще, вы можете использовать Выражение генератора Python для выполнения той же задачи, создавая отфильтрованный список по элементам по запросу:
for filtered_url in (line for line in file if 'CONTENT_ITEM_ID' in line):
do_something_with_filtered_url(filtered_url)
Для полноты; Вы также можете использовать ifilter. Это похоже на фильтр, но не для создания списка.
from itertools import ifilter
for line in ifilter(lambda line: 'CONTENT_ITEM_ID' in line, urls):
do_something(line)