python對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)
運行結(jié)果:
2、使用sort()函數(shù)構造排序
示例代碼:
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)
運行結(jié)果:
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)
運行結(jié)果:
優(yōu)化上述代碼,當ip_list列表中有數(shù)以億計的ip時,上述代碼效率是非常低的,耗時主要在打開文件寫數(shù)據(jù)方面,可以把每一類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)
運行結(jié)果:
如果數(shù)據(jù)量過大,ip_dic_save會占用較大內(nèi)存,可以對字典中的每個key:value鍵值對進行判斷,若value列表長度到達某個長度時,可以分批次寫入到文件中。
到此這篇關于python對ip地址進行排序、分類的方法詳解的文章就介紹到這了,更多相關python對ip排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python棧實現(xiàn)進制轉(zhuǎn)換的示例詳解
棧(Stack)是計算機科學中常用的數(shù)據(jù)結(jié)構,具有眾多實際應用,其中之一是使用棧來實現(xiàn)進制轉(zhuǎn)換,將一個數(shù)字從一種進制表示轉(zhuǎn)換為另一種進制表示,本文將深入研究棧的原理,以及如何使用Python實現(xiàn)十進制到二進制、八進制和十六進制的進制轉(zhuǎn)換,需要的朋友可以參考下2023-11-11