Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从嵌套列表中筛选/删除/排除带有端口的专用IP_Python_Regex_Ip Address_List Comprehension - Fatal编程技术网

Python 从嵌套列表中筛选/删除/排除带有端口的专用IP

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

什么: 正在使用Python 2.7

我正在使用virustotal API生成列表格式的IP列表。在对象上运行type()时,它返回list。底部是一个数据示例。有没有办法制作一个过滤器、regexp列表理解或一些通配符系统来删除从10开始的所有IP。172.16-172.31和192.168

原因:

有一些常见的IP是从报告中生成的,但它们对我来说是无用的。我做了一个列表理解来过滤掉特定的地址,但是列表正在增长,而且它很快变得很明显,排除主列表的列表将使事情变得缓慢。我想删除所有不重要的IP,这样我就不会因为对DB的无用提交而减慢脚本的速度

如何:

示例:数据类型:

>>> 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)]