def writeMapToFile(f, m): # Size of the map, 4 bytes buf = pack('<i', len(m)) f.write(buf) for item in m.items(): info = item[1] NameHelper.writeProtoToFile(f, info)
def __init__(self): self.globalInfo = NameHelper.getInitedGlobalNameInfo() self.xingCharMap = {} # Family name character map object. self.xingMap = {} # Family name string map object. self.mingCharMap = {} # First name character map object. self.mingMap = {} # First name string map object. self.xingMingMap = {} # Full name string map object.
def readMapFromFileGenerator(f): # Size of the map, 4 bytes buf = f.read(4) size, = unpack('<i', buf) for i in range(0, size): info = NameHelper.readProtoFromFile(f, RawNameItemInfo) yield info
def importResultFromFile(self, fileName): f = open(fileName, 'r') self._resetTable() # Global infomation globalInfo = NameHelper.readProtoFromFile(f, GlobalNameInfo) self._addGlobalInfo(globalInfo) # Map self._importMapFromFile(f, self.XING_CHAR_MAP_NAME) log.info('XingCharMap imported...') self._importMapFromFile(f, self.XING_MAP_NAME) log.info('XingMap imported...') self._importMapFromFile(f, self.MING_CHAR_MAP_NAME) log.info('MingCharMap imported...') self._importMapFromFile(f, self.MING_MAP_NAME) log.info('MingMap imported...') self._importMapFromFile(f, self.XING_MING_MAP_NAME) log.info('XingMingMap imported...') # Array self._importRankArrayFromFile(f, self.XING_CHAR_RANK_NAME) log.info('XingCharArray imported...') self._importRankArrayFromFile(f, self.XING_RANK_NAME) log.info('XingArray imported...') self._importRankArrayFromFile(f, self.MING_CHAR_RANK_NAME) log.info('MingCharArray imported...') self._importRankArrayFromFile(f, self.MING_RANK_NAME) log.info('MingArray imported...') self._importRankArrayFromFile(f, self.XING_MING_RANK_NAME) log.info('XingMingArray imported...')
def accumulateXingMing(self, xingMing, profile): """Accumulate a single Name.""" self.result.globalInfo.xing_ming_count += 1 info = self.result.xingMingMap.get(xingMing) if not info: info = NameHelper.getInitedRawNameItemInfo(xingMing) self.result.xingMingMap[xingMing] = info self.setInfo(info, profile)
def accumulateMingChar(self, char, profile): """Accumulate a single char for Name.""" self.result.globalInfo.ming_char_count += 1 info = self.result.mingCharMap.get(char) if not info: info = NameHelper.getInitedRawNameItemInfo(char) self.result.mingCharMap[char] = info self.setInfo(info, profile)
def readMapFromFile(f): m = {} # Size of the map, 4 bytes buf = f.read(4) size, = unpack('<i', buf) for i in range(0, size): info = NameHelper.readProtoFromFile(f, RawNameItemInfo) assert not m.get(info.text), 'Duplicate key in the map.' m[info.text] = info return m
def writeToFile(self, fileName): f = open(fileName, 'w') # Global infomation 4 * 3 = 12 bytes NameHelper.writeProtoToFile(f, self.globalInfo) # Write Map Result.writeMapToFile(f, self.xingCharMap) Result.writeMapToFile(f, self.xingMap) Result.writeMapToFile(f, self.mingCharMap) Result.writeMapToFile(f, self.mingMap) Result.writeMapToFile(f, self.xingMingMap) # Write array Result.writeArrayToFile(f, self.xingCharSortedArray) Result.writeArrayToFile(f, self.xingSortedArray) Result.writeArrayToFile(f, self.mingCharSortedArray) Result.writeArrayToFile(f, self.mingSortedArray) Result.writeArrayToFile(f, self.xingMingSortedArray) f.close()
def readFromFile(self, fileName): f = open(fileName, 'r') # Global infomation self.globalInfo = NameHelper.readProtoFromFile(f, GlobalNameInfo) # Read Map self.xingCharMap = Result.readMapFromFile(f) self.xingMap = Result.readMapFromFile(f) self.mingCharMap = Result.readMapFromFile(f) self.mingMap = Result.readMapFromFile(f) self.xingMingMap = Result.readMapFromFile(f) # Read array self.xingCharSortedArray = Result.readArrayFromFile(f) self.xingSortedArray = Result.readArrayFromFile(f) self.mingCharSortedArray = Result.readArrayFromFile(f) self.mingSortedArray = Result.readArrayFromFile(f) self.xingMingSortedArray = Result.readArrayFromFile(f) f.close()
def getMingCharInfo(self, mingChar): """Get MingChar info, None if does not exist.""" rawInfo = self._dataBase.getMingCharInfo(mingChar) if not rawInfo: return None globalInfo = self._dataBase.getGlobalInfo() return NameHelper.getMingCharInfo(rawInfo, globalInfo)
def getXingInfo(self, xing): """Get Xing info, None if does not exist.""" rawInfo = self._dataBase.getXingInfo(xing) if not rawInfo: return None globalInfo = self._dataBase.getGlobalInfo() return NameHelper.getXingInfo(rawInfo, globalInfo)