def _lookup_phone(self, phone_num):
phone_num = str(phone_num)
assert 7 <= len(phone_num) <= 11
int_phone = int(str(phone_num)[0:7])
left = 0
right = self.phone_record_count
while left <= right:
middle = int((left + right) / 2)
current_offset = int(self.first_phone_record_offset + middle * self.phone_fmt_length)
if current_offset >= len(self.buf):
return
buffer = self.buf[current_offset: current_offset + self.phone_fmt_length]
cur_phone, record_offset, phone_type = struct.unpack(self.phone_fmt,
buffer)
if cur_phone > int_phone:
right = middle - 1
elif cur_phone < int_phone:
left = middle + 1
else:
record_content = get_record_content(self.buf, record_offset)
return Phone._format_phone_content(phone_num, record_content,
phone_type)
转载于:https://my.oschina.net/donngchao/blog/3003697