当前位置:   article > 正文

Python--数字加中文转换为价格(类似发票大写价格转换为数字)_python价格单位

python价格单位

数字加汉字数据转换为纯数字价格

场景分析

最近获取到了如下类型的数据:
11万1千,3万1,1万5百,为了方便运算需要将数据转换位纯数字形式。也就是说需要转换数字加中文的字符串为纯数字形式,以便更好的使用。

实践操作

思路一

运用正则表达式,提取出字符串中的数字加文字,分别存在两个个数组a和b,以下面两种情况加以讨论
1.1万1千 可以转换为a => [11,1],b => [“万”,“千”],此时可以看出数字和单位是一一对应的,直接“相乘”就行
2.3万1 可以转换为a => [3,1], b => [“万”],此时a中1的单位应该是千,也就应该是0.1万。
于是有了如下代码:

import re
use_index = {'万': 10000, '千': 1000, '百': 100, '十': 10}

def get_price0(s):
    nums = re.findall("\d+",s)
    danwei = re.findall("\d+(\w)",s)
    numlen = len(nums)
    danweilen = len(danwei)
    price = 0
    for i in range(numlen - 1):
        price +=use_index[danwei[i]] * int(nums[i])
    # 只需要判断位数是否相等,相等就直接乘,不相等就乘上一位单位
    if numlen == danweilen:
        price += use_index[danwei[-1]] * int(nums[-1])
    else:
        price += use_index[danwei[-1]] * int(nums[-1]) / 10
    return int(price)


if __name__ == '__main__':
    s = ["11万1千","3万1","1万5百"]
    for ss in s:
        price = get_price0(ss)
        print(price)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

思路二

有鉴于思路一的方法,可以考虑一个片段abc,abc为三个字符,现考虑b,如果b为数字,那么就要考虑b的前一位是否为数字,b的后一位是否为单位。考虑了这两点就可以解决问题了。

use_index = {'万': 10000, '千': 1000, '百': 100, '十': 10}

def get_price(s):
    s = " " + s + " "
    price = 0
    fg = 0
    for i in range(1, len(s) - 1):
        c = s[i]
        if c.isdigit():
            fg = 10 * fg + int(c)
            if not s[i + 1].isdigit():
                price = price + fg * use_index[s[i + 1]] if s[i + 1] != " " else price + fg * use_index[s[i - 1]] / 10
                fg = 0
    return price


if __name__ == '__main__':
    s = ["11万1千","3万1","1万5百"]
    for ss in s:
        price = get_price(ss)
        print(price)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

问题延伸

当原始问题中数字变为中文数字时,就需要进一步的转换了,将中文转换为数字,另外当出现2百5十万3千8百这样的情况时,思路一也就不是很好处理了,思路二的话,可以在加一种中间位和前一位都为汉字的情况进行讨论了。由于目前暂时不会涉及到,就只留下了解决思路。
另外对于发票的转换,可以直接使用Excel中的扩展函数zhmoneytonum(将中文大写金额转为数字金额)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/536615
推荐阅读
相关标签
  

闽ICP备14008679号