python对ip地址进行排序、分类的方法详解
作者:IT之一小佬
这篇文章主要介绍了python对ip地址进行排序、分类的方法详解,IP协议全称为“网际互连协议Internet Protocol”,IP协议是TCP/IP体系中的网络层协议,需要的朋友可以参考下
1、使用socket库对ip进行排序
示例代码:
import socket ip_list = ['10.5.11.1', '192.168.1.33', '10.5.2.4', '10.5.1.3', '10.5.11.13', '10.5.11.12', '10.5.1.1', '10.5.1.2', '10.5.1.11', '10.5.1.13'] print(sorted(ip_list, key=socket.inet_aton)) for i in sorted(ip_list, key=socket.inet_aton): print(i)
运行结果:
2、使用sort()函数构造排序
示例代码:
ip_list = ['192.168.1.33', '10.5.2.4', '10.5.1.3', '202.98.96.68', '133.120.1.1', '192.168.1.22'] print(sorted(ip_list, key=lambda x: (int(x.split('.')[0]), int(x.split('.')[1]), int(x.split('.')[2])))) ip_lst = sorted(ip_list, key=lambda x: (int(x.split('.')[0]), int(x.split('.')[1]), int(x.split('.')[2]))) for i in ip_lst: print(i)
运行结果:
3、对ip地址进行分类
如:这儿按最后一位进行分类,写入不同的文件中。此处忽略对ip地址的排序。
示例代码:
ip_list = ['192.168.1.33', '10.5.2.4', '10.5.1.3', '202.98.96.68', '133.120.1.1', '192.168.1.22'] for ip in ip_list: last_ip_num = ip.split('.')[-1] with open('data/xxx.xxx.xxx.{}.txt'.format(last_ip_num), 'a', encoding='utf-8') as f: f.write(ip)
运行结果:
优化上述代码,当ip_list列表中有数以亿计的ip时,上述代码效率是非常低的,耗时主要在打开文件写数据方面,可以把每一类ip先暂时存储,最终一次性写入文件中。
示例代码:
ip_list = ['192.168.1.33', '10.5.2.33', '10.5.1.33', '202.98.96.1', '133.120.1.1', '192.168.1.1'] ip_dic_save = {} for ip in ip_list: last_ip_num = ip.split('.')[-1] if f'xxx.xxx.xxx.{last_ip_num}.txt' not in ip_dic_save: ip_dic_save[f'xxx.xxx.xxx.{last_ip_num}.txt'] = [] ip_dic_save[f'xxx.xxx.xxx.{last_ip_num}.txt'].append(ip + ';') else: ip_dic_save[f'xxx.xxx.xxx.{last_ip_num}.txt'].append(ip + ';') print(ip_dic_save) path = 'data/' for key, value in ip_dic_save.items(): with open(path + key, 'a', encoding='utf-8') as f: f.writelines(value)
运行结果:
如果数据量过大,ip_dic_save会占用较大内存,可以对字典中的每个key:value键值对进行判断,若value列表长度到达某个长度时,可以分批次写入到文件中。
到此这篇关于python对ip地址进行排序、分类的方法详解的文章就介绍到这了,更多相关python对ip排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!