Module pywander.text.zh_number
数字中文转换
Functions
def zh_number(num)
-
Expand source code
def zh_number(num): """ 输入一个整数值返回中文表达的字符串 """ if not isinstance(num, int): try: int(num) except Exception as e: raise ValueError('incorrect number format error.') zh_number_ref = [ (100000000, '亿'), (10000000, '千万'), (1000000, '百万'), (100000, '十万'), (10000, '万'), (1000, '千'), (100, '百'), (10, '十'), (1, '') ] zh_number_ref_string = '零一二三四五六七八九' result = '' if 0 <= num < 10: return zh_number_ref_string[num] flag = False last_suffix = '' for factor, suffix in zh_number_ref: if num // factor > 0: d = num // factor num = num - d * factor result += '{}{}'.format(zh_number_ref_string[d], suffix) flag = True last_suffix = suffix else: if flag and suffix and last_suffix and suffix[-1] != last_suffix[-1]: result += '零' flag = False result = result.rstrip('零') return result
输入一个整数值返回中文表达的字符串
def zh_number_to_int(string)
-
Expand source code
def zh_number_to_int(string): """ 将 一百一 或者 一百零一 这样的表达 转换称为 数字 字符串组成只允许是: 零一二三四五六七八九十百千万壹贰叁肆伍陆柒捌玖拾佰仟萬 此外还有 ‘0123456789’ 推荐的输入是标准中文数字格式,不过1万5千这样的不是很规范的格式也是支持的 >>> zh_number_to_int('一百') 100 >>> zh_number_to_int('二十二') 22 >>> zh_number_to_int('1万6千') 16000 ref https://github.com/binux/binux-tools/blob/master/python/chinese_digit.py """ result = 0 pre = 0 for s in string: if s not in CHS_ARABIC_MAP.keys(): raise ValueError('incorrect string format error.') res = list(map(lambda k: CHS_ARABIC_MAP[k], string)) for d in res: # 如果等于1万 if d == 10000: result += pre result = result * d pre = 0 # 如果等于十或者百,千 elif d >= 10: if pre == 0: pre = 1 result += d * pre pre = 0 # 如果是个位数 else: pre = d result += pre return result
将 一百一 或者 一百零一 这样的表达 转换称为 数字
字符串组成只允许是: 零一二三四五六七八九十百千万壹贰叁肆伍陆柒捌玖拾佰仟萬 此外还有 ‘0123456789’
推荐的输入是标准中文数字格式,不过1万5千这样的不是很规范的格式也是支持的
>>> zh_number_to_int('一百') 100 >>> zh_number_to_int('二十二') 22 >>> zh_number_to_int('1万6千') 16000
ref https://github.com/binux/binux-tools/blob/master/python/chinese_digit.py