python实现ip查询示例

332次阅读  |  发布于5年以前

以下代码实现了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==blocksize:
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)

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8