数字转中文读写....(参考别人后修改)

#coding=gbk
import re
import math

chinese_digits = (u'',u'',u'',u'',u'',u'',u'',u'',u'',u'')
chinese_jinzhi = (u'',u'',u'',u'',u'',u'')
wanindex = 5
def formatdigitwithjinzhi(digit,jinzhi):
    if(digit==0):
        return chinese_digits[digit]
    else:
        return chinese_digits[digit] + jinzhi

def formatcapchnumber(chnumber):
    s = chnumber
    s = s.replace(u"",u"").replace(u"",u"").replace(u"",u"").replace(u"",u"").replace(u"",u"").replace(u"",u"").replace(u"",u"").replace(u"",u"").replace(u"",u"")
    s = s.replace(u"",u"").replace(u"",u"").replace(u"",u"")
    print s

def format4digits(digits,saveonezeroathead = False):
    digits = '%04d' % digits
    s = ''
    jinzhi = -4
    for digit in digits:
        numeric_digit= int(digit)
        s+=formatdigitwithjinzhi(numeric_digit,chinese_jinzhi[jinzhi])
        jinzhi+=1
    if(saveonezeroathead):
        s = re.sub(r"^" + u"" + "{1,}",u"",s)
    else:
        s = re.sub(r"^" + u"" + "+","",s)
        s = re.sub(r"^" + u"一十",u"",s)
    s = re.sub(r"" + u"" + "+$","",s)
    s = re.sub(r"" + u"" + "{2,}",u"",s)
    return s

def genejinzhi(wanindex):
    s = ''
    if(wanindex % 2==1):
        s+=u""
    yicount = wanindex / 2
    for i in range(yicount):
        s+=u"亿"
    return s


def render(arg):
    source = re.sub("\D","",arg)
    source_list = []
    for i in range(int(math.ceil(len(source)/4.0))):
        if(i==0):
            source_list.insert(0,int(source[-4:]))
        else:
            source_list.insert(0,int(source[((-i-1)*4):(-i*4)]))
    result = ""
    oldresult = ""    
    firstpartdanweiindex = wanindex - len(source_list) + 2
    partindex = 0
    for part in source_list:
        oldresult = result
        if(len(source_list)>1 and partindex==(len(source_list)-1)):
            result += format4digits(part,saveonezeroathead = True)
        else:
            result += format4digits(part)
        if(oldresult!=result):
            result += genejinzhi(len(source_list) - partindex - 1)
            partindex +=1
    print result
    formatcapchnumber(result)

while(True):
    arg = raw_input("\n(q to quit)\n>>>")
    if(arg=="quit" or arg=="q" or arg=="exit"):
        break
    else:
        render(arg)
原文地址:https://www.cnblogs.com/fenix/p/2380485.html