python對ip地址進(jìn)行排序、分類的方法詳解
1、使用socket庫對ip進(jìn)行排序
示例代碼:
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)運(yùn)行結(jié)果:

2、使用sort()函數(shù)構(gòu)造排序
示例代碼:
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)運(yùn)行結(jié)果:

3、對ip地址進(jìn)行分類
如:這兒按最后一位進(jìn)行分類,寫入不同的文件中。此處忽略對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)運(yùn)行結(jié)果:

優(yōu)化上述代碼,當(dāng)ip_list列表中有數(shù)以億計(jì)的ip時(shí),上述代碼效率是非常低的,耗時(shí)主要在打開文件寫數(shù)據(jù)方面,可以把每一類ip先暫時(shí)存儲(chǔ),最終一次性寫入文件中。
示例代碼:
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)運(yùn)行結(jié)果:



如果數(shù)據(jù)量過大,ip_dic_save會(huì)占用較大內(nèi)存,可以對字典中的每個(gè)key:value鍵值對進(jìn)行判斷,若value列表長度到達(dá)某個(gè)長度時(shí),可以分批次寫入到文件中。
到此這篇關(guān)于python對ip地址進(jìn)行排序、分類的方法詳解的文章就介紹到這了,更多相關(guān)python對ip排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python?標(biāo)準(zhǔn)庫?fileinput與文件迭代器
這篇文章主要介紹了Python標(biāo)準(zhǔn)庫fileinput與文件迭代器,fileinput模塊可以對一個(gè)或多個(gè)文件中的內(nèi)容進(jìn)行迭代、遍歷等操作,更多詳細(xì)內(nèi)容需要的朋友可以參考一下2022-09-09
7個(gè)實(shí)用的Python自動(dòng)化代碼別再重復(fù)造輪子了
關(guān)于Python有一句名言:不要重復(fù)造輪子,給大家分享經(jīng)過Python3.6.4調(diào)試通過的代碼,感興趣的朋友跟隨小編一起看看吧2023-11-11
python棧實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換的示例詳解
棧(Stack)是計(jì)算機(jī)科學(xué)中常用的數(shù)據(jù)結(jié)構(gòu),具有眾多實(shí)際應(yīng)用,其中之一是使用棧來實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換,將一個(gè)數(shù)字從一種進(jìn)制表示轉(zhuǎn)換為另一種進(jìn)制表示,本文將深入研究棧的原理,以及如何使用Python實(shí)現(xiàn)十進(jìn)制到二進(jìn)制、八進(jìn)制和十六進(jìn)制的進(jìn)制轉(zhuǎn)換,需要的朋友可以參考下2023-11-11
Python學(xué)習(xí)之流程控制與條件判斷總結(jié)
這篇文章主要為大家介紹了Python中的流程控制與條件判斷,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下2022-03-03

