#!/usr/bin/env python
#coding:utf-8
'''
Created on 2015年12月8日 @author: DL @Description: 使用二分法查找mobile文件中区号归属地
'''
import os
import sys class SearchAreacode(object): def __init__(self,file_name='mobile_sort'):
self.fp = open(file_name)
self.fp.seek(0,os.SEEK_END)
self.size = self.fp.tell()
self.fp.seek(0,os.SEEK_SET) def Search_Areacode(self,areacode,start_p = 0):
fp_start = start_p
fp_end = self.size while fp_start < fp_end:
mid = fp_start + (fp_end - fp_start)/2
self.fp.seek(mid,os.SEEK_SET) self.Search_LineHead() line = self.fp.readline()
val = self.Search_cmp(areacode[3][:9], line)
if val == 0:
ac,province,provider=line.split('|')
print "%s|%s|%s"%(province,areacode[3],areacode[4])
break
elif val == 1:
fp_start = self.fp.tell()
else:
fp_end = mid
#print areacode
def Search_cmp(self,areacode,line):
tmp = line.split('|')
return cmp(areacode,tmp[0]) def Search_LineHead(self):
while self.fp.tell() > 0:
self.fp.seek(-1,os.SEEK_CUR)
val = self.fp.read(1)
if val == '\n':
break
#print val
self.fp.seek(-1,os.SEEK_CUR)
def Search_DeInit(self):
self.fp.close() if __name__ == '__main__':
# 通过管道输入
log_line = sys.stdin.readlines()
obj = SearchAreacode('area_code.txt')
for line in log_line:
content = line.split(' ')
#print content[3][:9]
obj.Search_Areacode(content) obj.Search_DeInit()

使用二分法查找mobile文件中区号归属地的更多相关文章

  1. Java查找指定文件中指定字符的个数

    package lwl.youweb2.test; import java.io.BufferedReader; import java.io.FileReader; import java.io.I ...

  2. linux查找所有文件中某个字符串

    查找目录下的所有文件中是否含有某个字符串 find .|xargs grep -ri "IBM" 查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名 find .|xar ...

  3. linux命令-查找所有文件中包含某个字符串

    查找目录下的所有文件中是否含有某个字符串 find .|xargs grep -ri "IBM" 查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名 find .|xar ...

  4. linux 在vi文件中添加行号

    方法一: 1.显示当前行行号,在VI的命令模式下输入 :nu 2.显示所有行号,在VI的命令模式下输入 :set nu 方法二: 使用vi编辑~/.vimrc文件,在该文件中加入一行"set ...

  5. linux 小技巧(查找替换文件中的ascii编码字符)

    这里纪录一些linux下用到的小技巧,以免遗忘 在linux中经常碰见各种文件处理.最常用的就是替换文件中的某些字符.常见字符替换还是很容易完成.但是有些不可见字符以及ascii编码字符等等都无法直接 ...

  6. java mybatis XML文件中大于号小于号转义

    因为这个是xml文件不允许出现类似“>”这样的字符 用了转义字符把>和<替换掉,然后就没有问题了. <=   相当于 <= >=  相当于 >= XML转义字 ...

  7. linux查找某个文件中单词出现的次数

    文件名称:list 查找单词名称:test 操作命令: (1)more list | grep -o test | wc -l (2)cat list | grep -o test | wc -l ( ...

  8. linux 查找匹配文件中包含指定字符的 前五行,这里是指所有匹配的前五行

    最近被问到 一个关于查找匹配字符的信息显示问题: 系统/etc/sysctl.conf文件会定义系统内核的一些配置,请查找和net有关的信息,并只打印前面5行信息. 解决方式大概试两种写法均可: 1. ...

  9. java mybatis XML文件中大于号小于号转义(转载)

    因为这个是xml文件不允许出现类似“>”这样的字符 用了转义字符把>和<替换掉,然后就没有问题了. XML转义字符 字段 符号 说明 &lt ; < 小于号 & ...

随机推荐

  1. Sklearn库例子——决策树分类

    Sklearn上关于决策树算法使用的介绍:http://scikit-learn.org/stable/modules/tree.html 1.关于决策树:决策树是一个非参数的监督式学习方法,主要用于 ...

  2. unity, reduce android size

    参考: https://www.youtube.com/watch?v=TYSmf_zgtZo http://stackoverflow.com/questions/41087220/how-to-u ...

  3. openssl 升级

    openssl version -a rpm -q --changelog  openssl | grep CVE bash -version #!/bin/bash if [[ $EUID -ne ...

  4. Selenium2入门(一)简介

    Selenium 是一款有名的 Web 应用程序测试框架,用于进行功能测试.新版本 Selenium 2 结合了 Selenium 1 和 WebDriver(Selenium 的并行项目)中的最佳特 ...

  5. vmware12无法打开内核设备“\\.\Global\vmx86”

    vmware12 无法打开内核设备"\\.\Global\vmx86": 系统找不到指定的文件.你想要在安装 VMware Workstation 前重启吗? 打开vmware12 ...

  6. fielderror里的fieldName代表的是jsp里的fieldName还是Action类的成员变量?(待解答)

    1.值栈的Action对象中会有一个fielderror属性,代表着字段错误. fielderror是Map<String,List<String>>类型 例如下面的值栈里可看 ...

  7. SOAOffice和iWebOffice、NTKO的比较及其优势(转)

    http://www.cnblogs.com/liping13599168/articles/1681465.html SOAOffice和iWebOffice.NTKO的比较及其优势 近年来,市场上 ...

  8. es let2

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. java线程池

    http://cuisuqiang.iteye.com/blog/2019372 Java四种线程池的使用 java线程线程池监控 Java通过Executors提供四种线程池,分别为:newCach ...

  10. linux mint 崩溃

    换完linux mint 今天突然崩溃了.出现如下错误 因为是双屏.一个屏幕显示一般,这么不重要.搜了一下,找到解决方案 解决办法 ctrl+atl+f1 login sudo apt-get ins ...