Posted in Python onMarch 26, 2014
以下代码实现了ip查询功能
处理程序
import os,time def getip(filepath): ip2city={} file=open(filepath,'r') lines=file.readlines() file.close() for line in lines: ip=line.split(' ')[0] city=line.split(' ')[1] haship=hashm(ip) if haship in ip2city: pass else: ip2city[haship]=city print('Hash done!') return ip2city def hashm(ip): iplist=ip.split('.') ip=int(iplist[0])*4+int(iplist[1])*2+int(iplist[2]) return ip def getcityfromip(filepath,ipandcity): outputstr=[] for file in os.listdir(filepath): file_handler=open(filepath+'\\'+file,'r') line=file_handler.readline() while line: ip=hashm(line.rstrip()) if ip in ipandcity: outputstr.append(line.rstrip()+' '+ipandcity[ip]) line=file_handler.readline() file_handler.close() outfile_handler=open(filepath+'\\'+file.split('.')[0]+'_out.txt','a+') outfile_handler.writelines(outputstr) outfile_handler.close() print(file.split('.')[0]+'_out.txt'+'done!') def splitfile(filepath): file=open(filepath,'r') block_size=8000000 filecount=1 temp=[] count=0 line=file.readline() while line or temp: if count==block_size: wfile=open('D:\\ipfile\\file_'+str(filecount)+'.txt','a+') wfile.writelines(temp) temp=[] count=0 wfile.close() filecount+=1 print('Split'+str(filecount)+' done!') else: count+=1 temp.append(line) line=file.readline() file.close() return os.path.join('D:\\'+'ipfile') if __name__ == '__main__': start=time.clock() filepath='D:\\ip.txt' ippath='D:\\citys.txt' ip2city=getip(ippath) splitfilepath=splitfile(filepath) getcityfromip('D:\\'+'ipfile',ip2city) end=time.clock() print(end-start)
生成IP
#Generate 100 millon ip import random import time def generateIpAdd(file,num): ip=[] file=open(file,'a+') for i in range(num): ipAdd='192.168.'+str(random.randint(0,255))+'.'+str(random.randint(0,255)) ip.append(ipAdd+'\n') file.writelines(ip) file.close() if __name__=='__main__': start=time.clock() for i in range(10000): generateIpAdd('D:\ip.txt',10000) end=time.clock() print(end-start)
python实现ip查询示例
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@