python大写数字转阿拉伯数字脚本

前言

在中文支票上经常会遇到大写数字格式, 如果有一堆账本记录在Excel文档里, 需要转换格式成带小数点的阿拉伯数字.

需求

比如转化如下的数字成小数
在这里插入图片描述

代码

import xlrd
from word2number import w2n
file = 'bills.xlsx' # change filename

CN_NUM = {
    '〇' : 0, '一' : 1, '二' : 2, '三' : 3, '四' : 4, '五' : 5, '六' : 6, '七' : 7, '八' : 8, '九' : 9, '零' : 0,
    '壹' : 1, '贰' : 2, '叁' : 3, '肆' : 4, '伍' : 5, '陆' : 6, '柒' : 7, '捌' : 8, '玖' : 9, '貮' : 2, '两' : 2,
}

CN_UNIT = {
	'元' : 1,
    '十' : 10,
    '拾' : 10,
    '百' : 100,
    '佰' : 100,
    '千' : 1000,
    '仟' : 1000,
    '万' : 10000,
    '萬' : 10000,
    '亿' : 100000000,
    '億' : 100000000,
    '兆' : 1000000000000,
    '角' : 0.1,
    '分' : 0.01
}

def cn2num(cn:str) -> float:
	ans = 0.0
	length = len(cn)
	start = 0
	if cn[0] in CN_UNIT:
		ans += CN_UNIT[cn[0]]
		start = 1
	for i in range(start, length, 1):
		if cn[i] in CN_NUM and cn[i + 1] in CN_UNIT:
			val, unit = CN_NUM[cn[i]], CN_UNIT[cn[i + 1]] 
			ans += val * unit
		else: continue
	return ans
	
def read_excel():
	global sheet1, wb
	wb = xlrd.open_workbook(filename=file) # 打开文件
	print(wb.sheet_names()) # 获取所有表格名字
	sheet1 = wb.sheet_by_index(0) # 通过索引获取表格
	print(sheet1)
	print(sheet1.name,sheet1.nrows,sheet1.ncols)
	# rows = sheet1.row_values(0)#获取行内容

'''
	# test: 
	print(rows)
	print(cols)
	print(sheet1.cell(1,0).value)#获取表格里的内容,三种方式
	print(sheet1.cell_value(1,0))
	print(sheet1.row(1)[0].value)
'''

if __name__ == '__main__':
	read_excel()

	'''
	# test: 
	print(cn2num('拾捌元零捌分'))
	print(cn2num('伍拾壹元肆角伍分'))
	print(cn2num('陆分'))
	print(cn2num('壹元柒角'))
	print(cn2num('贰角柒分'))
	print(cn2num('拾玖元伍角肆分'))
	'''

	# calculate sum of number
	ncols = sheet1.ncols
	nrows = sheet1.nrows
	ans = 0.0
	for i in range(1, nrows):
		rows = sheet1.row_values(i)#获取行内容
		temp = cn2num(rows[0])
		ans += temp * float(rows[1])

	print(ans)
	print('%.2f' %ans) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值