Python 从嵌套列表中筛选/删除/排除带有端口的专用IP
什么: 正在使用Python 2.7 我正在使用virustotal API生成列表格式的IP列表。在对象上运行type()时,它返回list。底部是一个数据示例。有没有办法制作一个过滤器、regexp列表理解或一些通配符系统来删除从10开始的所有IP。172.16-172.31和192.168 原因: 有一些常见的IP是从报告中生成的,但它们对我来说是无用的。我做了一个列表理解来过滤掉特定的地址,但是列表正在增长,而且它很快变得很明显,排除主列表的列表将使事情变得缓慢。我想删除所有不重要的IP,这样我就不会因为对DB的无用提交而减慢脚本的速度 如何: 示例:数据类型:Python 从嵌套列表中筛选/删除/排除带有端口的专用IP,python,regex,ip-address,list-comprehension,Python,Regex,Ip Address,List Comprehension,什么: 正在使用Python 2.7 我正在使用virustotal API生成列表格式的IP列表。在对象上运行type()时,它返回list。底部是一个数据示例。有没有办法制作一个过滤器、regexp列表理解或一些通配符系统来删除从10开始的所有IP。172.16-172.31和192.168 原因: 有一些常见的IP是从报告中生成的,但它们对我来说是无用的。我做了一个列表理解来过滤掉特定的地址,但是列表正在增长,而且它很快变得很明显,排除主列表的列表将使事情变得缓慢。我想删除所有不重要的IP
>>> fil2 = [['255.255.255.255',67],['137.170.185.211',123],['213.186.33.99',53],['10.0.2.15',68]]
>>> type(fil2)
<type 'list'>
>>fil2=[[255.255.255',67],[137.170.185.211',123],[213.186.33.99',53],[10.0.2.15',68]]
>>>类型(fil2)
制作一份理解列表,然后用开始,如:
ips = [ip for ip in file2[0] if not str(ip[0]).startswith(('192.168.','10.','172.16.','172.31.')) ]
您可以执行以下操作:
dont_start_with_these = ('10.', '172.16.', '172.31.', '192.168')
filtered_ip = [ip for ip in fil2 if not ip[0].startswith(dont_start_with_these)]
编辑:这是一个更紧凑的解决方案,正如Vizjerei所建议的那样,这看起来很有希望,但我一直遇到这样的错误,“AttributeError:'list'object没有属性'startswith'”,这是供将来参考的好材料。更新了,但Vizjerei的答案,一旦修复,就更紧凑了。我最终选择了这个选项,但Vizjrei看起来非常适合,非常感谢你们两位,我会尽可能回来投票。它工作得非常好。天啊,我从来没有想到startswith
接受一个元组。我真丢脸。虽然你应该加一些括号。此外,你应该在最后两个前缀上加一个点,否则它们会过滤掉比预期更多的前缀。我可以很好地识别这一点,但我得到了这个错误。我看到的列表理解越多,我就越喜欢它们的实用性。TypeError:“int”对象没有属性“getitem”@Vizjerei否:在参数开头需要括号,否则您将得到TypeError:startWith()最多使用3个参数(给定4个)
。查看我的更新答案。@Germano thx没有检查它是否工作,但现在应该可以工作了,请重新编辑它。请参阅标准库(Python 3.3+)或包(Python<3.3)中的模块。
dont_start_with_these = ('10.', '172.16.', '172.31.', '192.168')
filtered_ip = [ip for ip in fil2 if not ip[0].startswith(dont_start_with_these)]