加载qqwry.dat文件。成功返回True,失败返回False。 参数filename可以是qqwry.dat的文件名(str类型),也可以是bytes类型的文件内容。
(self, filename: Union[str, bytes], loadindex: bool=False)
| 94 | self.__fun = None |
| 95 | |
| 96 | def load_file(self, filename: Union[str, bytes], loadindex: bool=False) -> bool: |
| 97 | '''加载qqwry.dat文件。成功返回True,失败返回False。 |
| 98 | 参数filename可以是qqwry.dat的文件名(str类型),也可以是bytes类型的文件内容。''' |
| 99 | self.clear() |
| 100 | |
| 101 | if type(filename) == bytes: |
| 102 | self.data = buffer = filename |
| 103 | filename = 'memory data' |
| 104 | elif type(filename) == str: |
| 105 | # read file |
| 106 | try: |
| 107 | with open(filename, 'br') as f: |
| 108 | self.data = buffer = f.read() |
| 109 | except Exception as e: |
| 110 | logger.error('%s open failed:%s' % (filename, str(e))) |
| 111 | self.clear() |
| 112 | return False |
| 113 | |
| 114 | if self.data == None: |
| 115 | logger.error('%s load failed' % filename) |
| 116 | self.clear() |
| 117 | return False |
| 118 | else: |
| 119 | self.clear() |
| 120 | return False |
| 121 | |
| 122 | if len(buffer) < 8: |
| 123 | logger.error('%s load failed, file only %d bytes' % |
| 124 | (filename, len(buffer)) |
| 125 | ) |
| 126 | self.clear() |
| 127 | return False |
| 128 | |
| 129 | # index range |
| 130 | index_begin = int4(buffer, 0) |
| 131 | index_end = int4(buffer, 4) |
| 132 | if index_begin > index_end or \ |
| 133 | (index_end - index_begin) % 7 != 0 or \ |
| 134 | index_end + 7 > len(buffer): |
| 135 | logger.error('%s index error' % filename) |
| 136 | self.clear() |
| 137 | return False |
| 138 | |
| 139 | self.index_begin = index_begin |
| 140 | self.index_end = index_end |
| 141 | self.index_count = (index_end - index_begin) // 7 + 1 |
| 142 | |
| 143 | if not loadindex: |
| 144 | logger.info('%s %s bytes, %d segments. without index.' % |
| 145 | (filename, format(len(buffer),','), self.index_count) |
| 146 | ) |
| 147 | self.__fun = self.__raw_search |
| 148 | return True |
| 149 | |
| 150 | # load index |
| 151 | self.idx1 = array.array('L') |
| 152 | self.idx2 = array.array('L') |
| 153 | self.idxo = array.array('L') |