python对ip地址进行排序、分类的方法详解

 更新时间:2023年07月26日 08:40:17   作者: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排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实战之实现截图识别文字

    Python实战之实现截图识别文字

    本文主要介绍了通过python实现截图识别图中文字的功能,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以学习一下
    2021-11-11
  • python3 mmh3安装及使用方法

    python3 mmh3安装及使用方法

    这篇文章主要介绍了python3 mmh3安装及使用方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • python迭代器模块itertools常用的方法

    python迭代器模块itertools常用的方法

    这篇文章主要介绍了python迭代器模块itertools常用的方法,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • python3实现点餐系统

    python3实现点餐系统

    这篇文章主要为大家详细介绍了python3实现点餐系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • 利用Python yagmail三行代码实现发送邮件

    利用Python yagmail三行代码实现发送邮件

    这篇文章主要给大家介绍了关于利用Python yagmail三行代码实现发送邮件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-05-05
  • Python利用matplotlib.pyplot.boxplot()绘制箱型图实例代码

    Python利用matplotlib.pyplot.boxplot()绘制箱型图实例代码

    相信大家应该都知道Python绘制箱线图主要用matplotlib库里pyplot模块里的boxplot()函数,下面这篇文章主要给大家介绍了关于Python利用matplotlib.pyplot.boxplot()绘制箱型图的相关资料,需要的朋友可以参考下
    2022-08-08
  • selenium+python配置chrome浏览器的选项的实现

    selenium+python配置chrome浏览器的选项的实现

    这篇文章主要介绍了selenium+python配置chrome浏览器的选项的实现。文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • 如何处理json中不带双引号的key的问题

    如何处理json中不带双引号的key的问题

    这篇文章主要介绍了如何处理json中不带双引号的key的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • python多线程semaphore实现线程数控制的示例

    python多线程semaphore实现线程数控制的示例

    这篇文章主要介绍了python多线程semaphore实现线程数控制的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Django-Model数据库操作(增删改查、连表结构)详解

    Django-Model数据库操作(增删改查、连表结构)详解

    这篇文章主要介绍了Django-Model数据库操作(增删改查、连表结构)详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07

最新评论