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