将文字数字转阿拉伯数字(Python)

今天改进爬虫的时候有这样的需求,如果是文字的数字把他转化成数字存储。

然后百度了一下没什么能看的博客。

其实挺无奈的,搜出来的博客全是一样的代码,有的图都是COPY,尤指CSDN,博客质量大多很差。怀疑博主转的时候试了没?

这样COPY还不如不发,恶心。

于是自己写了代码,目前测试几例没什么问题,如果出现不规则的如”一二三四五万“这种会出现问题,不过这种本来就不符合规范

代码如下:

# 18.11.1更新,加入对诸如'人民币贰仟陆佰玖拾陆万陆仟零捌拾元玖角贰分'这种小数的判断

 1 # -*- coding=utf-8 -*-
 2 # 18.10.29
 3 # 文字数字(汉语)转数字
 4 # 18.11.1
 5 # 更新对'人民币贰仟陆佰玖拾陆万陆仟零捌拾元玖角贰分'这种小数的判断
 6 
 7 cn_sum = {
 8     '': '0', '': '1', '': '2', '': '3', '': '4', '': '5', '': '6', '': '7', '': '8', '': '9', '': '0',
 9     '': '1', '': '2', '': '3', '': '4', '': '5', '': '6', '': '7', '': '8', '': '9', '': '2', '': '2',
10 }
11 
12 cn_unit = {
13     '': 10,
14     '': 10,
15     '': 100,
16     '': 100,
17     '': 1000,
18     '': 1000,
19     '': 10000,
20     '': 10000,
21     '亿': 100000000,
22     '': 100000000,
23     '': 1000000000000,
24     '': 0.1,
25     '': 0.01
26 }
27 
28 
29 def chn_to_sum(chn):
30     # 传入字符串
31     sum = 0
32     lis = []
33     flo = False
34     str_flo = ''
35     for i in chn:
36         if flo:
37             if i in cn_sum:
38                 str_flo += cn_sum[i]
39             if i in cn_unit:
40                 lis.append(cn_unit[i])
41         else:
42             if i == '':
43                 flo = True
44             if i in cn_sum:
45                 lis.append(cn_sum[i])
46             if i in cn_unit:
47                 lis.append(cn_unit[i])
48     for k in range(len(lis)):
49         if k == len(lis)-1:
50             if str_flo:
51                 sum += float('.'+str_flo)
52             if type(lis[k]) == str:
53                 sum = sum+int(lis[k])
54         if type(lis[k]) in [int, float]:
55             if lis[k] > sum:
56                 sum = (sum+int(lis[k-1]))*lis[k]
57             else:
58                 sum = sum + (int(lis[k-1])*lis[k])
59 
60     return round(sum, 2)

发现问题请提醒我,希望可以帮到你

原文地址:https://www.cnblogs.com/chnmig/p/9870996.html