数値を日本語化

# coding:utf-8

UUNIT=[u'', u'十' , u'百' , u'千']
BUINT = [u'', u'万', u'億', u'万億' , u'兆']
NUM=[u'零',u'一',u'二', u'三', u'四', u'五' , u'六', u'七', u'八', u'九']

def conv4(num, flag=False):
   ret = u''
   s = str(num)
   l = len(s)
   assert(len(s) <= 4)
   if flag and len(s)<4:
      ret = ret + NUM[0]
   for i in xrange(l):
      if s[i] != '0':
         ret = ret + NUM[int(s[i])]+UUNIT[l-i-1]
      elif s[i-1] != '0':
         ret = ret + NUM[0]
   return ret
def conv(num):
   strnum = str(num)
   l = len(strnum)
   j = l / 4
   jj = l % 4
   lss = [strnum[0:jj] for i in [1] if strnum[0:jj]] \
       + [strnum[i*4+jj:(i+1)*4+jj] for i in xrange(j) if strnum[i*4+jj:(i+1)*4+jj] ]
   print lss
   ul = len(lss)
   ret = u''
   zflag = False
   for i in xrange(ul):
      bu = BUINT[ul-i-1]
      tret = conv4(int(lss[i]), flag = i)
      if tret[-1:] == NUM[0]:
         tret = tret[:-1]
      if tret:
         print zflag , (tret+bu).encode('utf-8')
         if zflag and tret[0] != NUM[0] :
            ret = ret + NUM[0] +tret+bu
         else:
            ret = ret + tret+bu
         zflag = False
      else:
         zflag = True
   return ret

if __name__ == '__main__':
   print conv(1000)
   print conv(103056982342357234).encode('utf-8')