Python把中文数字替换成阿拉伯数字
本帖最后由 Cool_Breeze 于 2020-7-17 21:41 编辑更新了! 你们在测试一下看看还有没有bug!
#coding=utf-8
#By Gin
#2020/7/17
#Rev 02
import os
import re
ch_dict = {u'零':0, u'一':1, u'二':2, u'三':3, u'四':4,
u'五':5, u'六':6, u'七':7, u'八':8, u'九':9,u'十':10,
u'百':100, u'千':10 ** 3, u'万':10 ** 4,u'〇':0,
u'壹':1, u'贰':2, u'叁':3, u'肆':4,u'伍':5,
u'陆':6, u'柒':7, u'捌':8, u'玖':9,u'拾':10,
u'佰':100, u'仟':10 ** 3, u'萬':10 ** 4,u'亿':10 ** 8, u'億':10 ** 8,
u'幺': 1,u'两':2,
u'0':0, u'1':1, u'2':2, u'3':3, u'4':4,
u'5':5, u'6':6, u'7':7, u'8':8, u'9':9}
def converion(temp, unit):
intr = 0
#print(temp, unit)
temp_len = len(temp)
if temp_len <= 2 and temp == 10: #十到十九需要单独转换
for i in temp:
intr += i
return intr * unit
for i in range(temp_len):
if temp > 9 and temp != 0:
intr += temp * temp
if temp[-1] < 10: intr += temp[-1]
return intr * unit
def split_unit(temp, unit):
nu = []
while True:
if temp != unit:
nu.append(temp.pop(0))
continue
temp.pop(0)
return converion(nu, unit)
def onere(strarr):
#一一四 ===>>> 114
#四百三十六 ===>>> 436
res = ''
intr = 0
com = re.compile('[十百千万]')
if re.findall(com, strarr):
temp = for i in strarr] #列表666
if 10**8 in temp:
intr += split_unit(temp, 10**8)
if 10**4 in temp:
intr += split_unit(temp, 10**4)
if temp:
intr += converion([ i for i in temp], 1)
return str(intr)
else:
for i in strarr:
res += str(ch_dict)
return res
ch_key = ''.join(ch_dict.keys())
com = re.compile('第([' + ch_key + ']{1,20})[章|节]')
file = [] #文件列表
print('更改章节名中的中文数字为阿拉伯数字!')
while True:
try:
# pa = input('请输入路径:')
pa = r'D:\GIN\py\novel\biquge'
os.chdir(pa)
print('当前工作路径为:{}'.format(os.getcwd()))
break
except BaseException as err:
print(err)
continue
for i,j,k in os.walk(pa):
file = k
j.clear()
for i in file:
res = re.findall(com,i)
if res != [''] and res:
news = i.replace(*res, onere(*res))
print('{:<30}\n{:<30}\n'.format(i, news))
# os.rename(i, news)
更改章节名中的中文数字为阿拉伯数字!
当前工作路径为:D:\GIN\py\novel\biquge
第一万亿两千三百六十五万三千六百二十八章.txt
第1000023653628章.txt
第一亿一千一百二十三万四千五百六十七章 - 副本.txt
第111234567章 - 副本.txt
第一千一百二十三万四千五百六十七章 - 副本 (9).txt
第11234567章 - 副本 (9).txt
第一千二百零三章 - 副本 (5).txt
第1203章 - 副本 (5).txt
第一百二十三万四千五百六十七章 - 副本 (8).txt
第1234567章 - 副本 (8).txt
第一百二十三章 - 副本 (4).txt
第123章 - 副本 (4).txt
第一百零二亿五千零一万零一千零三十八章 - 副本 - 副本.txt
第10250011038章 - 副本 - 副本.txt
第八章 - 副本 (3).txt
第8章 - 副本 (3).txt
第十一章 - 副本 (2).txt
第11章 - 副本 (2).txt
第十万零三千六百零九章 - 副本 (7).txt
第103609章 - 副本 (7).txt
请按任意键继续. . . 沙发 转换的准吗
比如一万亿两千三百六十五万三千六百二十八 本帖最后由 Cool_Breeze 于 2020-7-17 16:38 编辑
nahongyan1997 发表于 2020-7-17 14:23
转换的准吗
比如一万亿两千三百六十五万三千六百二十八
不能,还需要改进,现在只能转换10w以内的 好的
这个可以咱俩一起研究,我想弄个闹钟的程序需要这个转换,虽然没有那么大的数但是还是有必要精确的 顶一下 没有学过数据分析,很是麻烦,大家给点意见吧! nahongyan1997 发表于 2020-7-17 16:52
这个可以咱俩一起研究,我想弄个闹钟的程序需要这个转换,虽然没有那么大的数但是还是有必要精确的
更新了!你去试试! 本帖最后由 Cool_Breeze 于 2020-7-20 10:53 编辑
单一#coding=utf-8
#By Gin
#2020/7/17
#Rev 02
ch_dict = {u'零':0, u'一':1, u'二':2, u'三':3, u'四':4,
u'五':5, u'六':6, u'七':7, u'八':8, u'九':9,u'十':10,
u'百':100, u'千':10 ** 3, u'万':10 ** 4,u'〇':0,
u'壹':1, u'贰':2, u'叁':3, u'肆':4,u'伍':5,
u'陆':6, u'柒':7, u'捌':8, u'玖':9,u'拾':10,
u'佰':100, u'仟':10 ** 3, u'萬':10 ** 4,u'亿':10 ** 8, u'億':10 ** 8,
u'幺': 1,u'两':2}
def converion(temp, unit):
intr = 0
# print(temp, unit)
temp_len = len(temp)
if temp_len <= 2 and temp == 10: #十到十九需要单独转换
for i in temp:
intr += i
return intr * unit
for i in range(temp_len):
if temp > 9 and temp != 0:
intr += temp * temp
if temp[-1] < 10: intr += temp[-1]
return intr * unit
def split_unit(temp, unit):
nu = []
while True:
if temp != unit:
nu.append(temp.pop(0))
continue
temp.pop(0)
return converion(nu, unit)
def onere(strarr):
intr = 0
temp = for i in strarr] #列表666
if 10**8 in temp:
intr += split_unit(temp, 10**8)
if 10**4 in temp:
intr += split_unit(temp, 10**4)
if temp:
intr += converion(temp, 1)
return str(intr)
test_dig = [u'九',
u'十一',
u'一百二十三',
u'一千二百零三',
u'一万一千一百零一',
u'十万零三千六百零九',
u'一百二十三万四千五百六十七',
u'一千一百二十三万四千五百六十七',
u'一亿一千一百二十三万四千五百六十七',
u'一百零二亿五千零一万零一千零三十八',
u'一千一百一十一亿一千一百二十三万四千五百六十七',
]
for i in test_dig:
print(i,'\n',onere(i))
九
9
十一
11
一百二十三
123
一千二百零三
1203
一万一千一百零一
11101
十万零三千六百零九
103609
一百二十三万四千五百六十七
1234567
一千一百二十三万四千五百六十七
11234567
一亿一千一百二十三万四千五百六十七
111234567
一百零二亿五千零一万零一千零三十八
10250011038
一千一百一十一亿一千一百二十三万四千五百六十七
111111234567
请按任意键继续. . . u'一亿亿 '
10000000100000000
发现BUG! 本帖最后由 nahongyan1997 于 2020-7-20 17:45 编辑
有些数字单位叠加要做乘算还要考虑是不是在4的倍数位上。 nahongyan1997 发表于 2020-7-20 17:43
有些数字单位叠加要做乘算还要考虑是不是在4的倍数位上。
的确!
页:
[1]