#!/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. 通过 SMB 直通优化文件服务器的性能

    https://technet.microsoft.com/zh-cn/library/hh831487.aspx Windows Server 2012 内置新增功能,称为 SMB 直通,用来支持使 ...

  2. STM32 硬件I2C 到底是不是个坑?

    /** ****************************************************************************** * @author    Maox ...

  3. Windows Server 2012 克隆修改SID

    更改SID后蓝屏\黑屏: 环境:Windows Server 2012 R2 目的:克隆出来的系统的SID都是一样,所以想修改各个系统的SID号 现象:克隆出来的系统的SID都是一样,所以想修改各个系 ...

  4. mysql:忘记root密码

    1:修改/etc/my.cnf 2:重启服务 3:进入mysql 4:修改密码 5:刷新权限 注意:修改完成后,别忘了修改/etc/my.cnf,删除skip-grant-tables,否则重启服务后 ...

  5. 脚本 用 scp 拷贝文件

    #!/usr/bin/expect set proj_dir /home/jksong/NewsSpark/openid_for_commonid set tmp_data_dir $proj_dir ...

  6. pjax技术的应用

    一.什么是PJAX? 现在有一些网站(apicloud,  github)支持这样一种浏览方式,当你点击站内的一个连接的时候,不是传统的跳转到另外一个连接,而是类似ajax的局部刷新改变页面内容,但是 ...

  7. 118、通过solid来定义不同边框的颜色,可以只定义一个边框的颜色

    以下是设置按钮的右边框和底边框颜色为红色,边框大小为3dp,如下图: 在drawable新建一个 buttonstyle.xml的文件,内容如下: <?xml version="1.0 ...

  8. 转mysql 多表 update sql语句总结

    mysql 多表 update 有几种不同的写法. 假定我们有两张表,一张表为Product表存放产品信息,其中有产品价格列Price:另外一张表是ProductPrice表,我们要将ProductP ...

  9. 跳过 centos部署 webpy的各种坑

    用centos部署webpy发现的各种坑: 1.python 版本: 2.中文编码: 3.web模块路径: 在命令行里输入python,能import web,但是网站错误报告一直报告没有找到web模 ...

  10. 浏览器内核控制Meta标签

    国内的主流浏览器都是双核浏览器:基于Webkit内核用于常用网站的高速浏览.基于IE的内核用于兼容网银.旧版网站.以360的几款浏览器为例,我们优先通过Webkit内核渲染主流的网站,只有小量的网站通 ...