【问题标题】:Python filter/remove URLs from a listPython 从列表中过滤/删除 URL
【发布时间】:2010-09-20 11:29:57
【问题描述】:

我有一个 URL 的文本文件,大约 14000 个。下面是几个示例:

http://www.domainname.com/pagename?CONTENT_ITEM_ID=100&param2=123
http://www.domainname.com/images?IMAGE_ID=10
http://www.domainname.com/pagename?CONTENT_ITEM_ID=101&param2=123
http://www.domainname.com/images?IMAGE_ID=11
http://www.domainname.com/pagename?CONTENT_ITEM_ID=102&param2=123

我已将文本文件加载到 Python 列表中,并尝试将所有带有 CONTENT_ITEM_ID 的 URL 分离到它们自己的列表中。在 Python 中执行此操作的最佳方法是什么?

干杯

【问题讨论】:

    标签: python url list filter


    【解决方案1】:

    这是 Graeme 的另一种替代方法,使用更新的列表解析语法:

    list2= [line for line in file if 'CONTENT_ITEM_ID' in line]
    

    你更喜欢哪一种,看个人喜好了!

    【讨论】:

      【解决方案2】:

      我喜欢@bobince 的回答 (+1),但会加大赌注。

      由于您有一个相当大的起始集,您可能希望避免将整个列表加载到内存中。除非您需要整个列表来做其他事情,否则您可以使用Python generator expression 来执行相同的任务,方法是根据请求逐项构建过滤后的列表:

      for filtered_url in (line for line in file if 'CONTENT_ITEM_ID' in line):
         do_something_with_filtered_url(filtered_url)
      

      【讨论】:

        【解决方案3】:
        list2 = filter( lambda x: x.find( 'CONTENT_ITEM_ID ') != -1,  list1 )
        

        过滤器在 list1 的每个元素(第二个参数)上调用函数(第一个参数)。如果函数返回 true(非零),则将元素复制到输出列表中。

        lambda 基本上创建了一个临时的未命名函数。这只是为了避免必须创建一个函数然后传递它,如下所示:

        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 )
        

        【讨论】:

          【解决方案4】:

          为了完整性;您也可以使用ifilter。它类似于过滤器,但不建立列表。

          from itertools import ifilter
          
          for line in ifilter(lambda line: 'CONTENT_ITEM_ID' in line, urls):
              do_something(line)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-05-06
            • 1970-01-01
            • 2020-08-31
            • 2013-04-22
            • 1970-01-01
            • 2022-01-21
            • 2022-01-22
            • 1970-01-01
            相关资源
            最近更新 更多