人民币大写转阿拉伯数字
'''
人民币大写转阿拉伯数字
'''
CNY_TABLE = {u'零': 0, u'壹': 1, u'贰': 2, u'叁': 3, u'肆': 4, u'伍': 5, u'陆': 6, u'柒': 7, u'捌': 8, u'玖': 9}
CNY_UNIT = {u'拾': 10, u'佰': 100, u'仟': 1000, u'角': 0.1, u'分': 0.01}
CARDINAL_NUMBER = {u'万': 10000, u'亿': 100000000}
def transform(cny_str):
price = 0.0
temp = 0
num = 0
for i in cny_str:
if i == u'零':
continue
if i in CNY_TABLE:
num = CNY_TABLE[i]
elif i in CNY_UNIT:
temp += num * CNY_UNIT[i]
num = 0
elif i == u'万':
temp += num
price += temp * 10000
temp = 0
num = 0
elif i == u'亿':
temp += num
price += temp
price *= 100000000
temp = 0
num = 0
elif i in {u'元', u'圆'}:
temp += num
price += temp
temp = 0
num = 0
price += temp
return price
if __name__ == '__main__':
cny_str = '人民币玖仟捌佰捌拾柒圆伍角柒分'
price = transform(cny_str)
print(price)
阿拉伯数字转成大写人民币
def _rmb_upper(value):
"""
人民币大写,将阿拉伯数字转成大写
来自:http://topic.csdn.net/u/20091129/20/b778a93d-9f8f-4829-9297-d05b08a23f80.html
传入浮点类型的值返回 unicode 字符串
"""
map = [u"零", u"壹", u"贰", u"叁", u"肆", u"伍", u"陆", u"柒", u"捌", u"玖"]
unit = [u"分", u"角", u"元", u"拾", u"百", u"千", u"万", u"拾", u"百", u"千", u"亿",
u"拾", u"百", u"千", u"万", u"拾", u"百", u"千", u"兆"]
nums = []
for i in range(len(unit) - 3, -3, -1):
if value >= 10 ** i or i < 1:
nums.append(int(round(value / (10 ** i), 2)) % 10)
words = []
zflag = 0
start = len(nums) - 3
for i in range(start, -3, -1):
if 0 != nums[start - i] or len(words) == 0:
if zflag:
words.append(map[0])
zflag = 0
words.append(map[nums[start - i]])
words.append(unit[i + 2])
elif 0 == i or (0 == i % 4 and zflag < 3):
words.append(unit[i + 2])
zflag = 0
else:
zflag += 1
if words[-1] != unit[0]:
words.append(u"整")
return ''.join(words)
result = _rmb_upper(9887.57)
print(result)
判断8位数字字符串是否为合法的日期格式
import datetime
def legal_date(strings):
'''
判断数字字符串是否为合法的日期格式,例如:20161211
:param strings: 数字字符串
:return:
'''
string = strings + '0'
cut_str = []
for i in range(len(string)):
substr = string[i:i + 8]
cut_str.append(substr)
if i + 8 == len(string):
break
date_str = []
for i_str in cut_str:
y = i_str[:4]
m = i_str[4:6]
d = i_str[6:]
string0 = y + ' ' + m + ' ' + d
date_str.append(string0)
legal = []
for date_ in date_str:
try:
year, month, day = date_.split()
r = datetime.date(int(year), int(month), int(day))
rs = str(r.year) + str(r.month) + str(r.day)
legal.append(rs)
except Exception:
pass
legal2 = []
for le in legal:
if len(le) == 8:
legal2.append(le)
return legal2
result = legal_date('20201229')
print(result)
result1 = legal_date('20201232')
print(result1)
阿拉伯数字转成中文数字(10以内,非人民币)
def num_to_char(num):
"""阿拉伯数字转成中文数字"""
num=str(num)
new_str=""
num_dict={"0":u"零","1":u"一","2":u"二","3":u"三","4":u"四","5":u"五","6":u"六","7":u"七","8":u"八","9":u"九"}
listnum=list(num)
shu=[]
for i in listnum:
shu.append(num_dict[i])
new_str="".join(shu)
return new_str
print(num_to_char(12))
求最大、最小日期:[‘20181229’, ‘20211229’, ‘32101123’]
def min_max_date(date_legal):
'''
求最大、最小日期
:param date_legal:
:return:
'''
move = []
for i, value in enumerate(date_legal):
max_value = max(int(i) for i in date_legal)
min_value = min(int(i) for i in date_legal)
m = str(max_value)
n = str(min_value)
if int(m[:4]) - int(n[:4]) < 100:
move.append([min_value, max_value])
else:
date_legal.remove(str(max_value))
return move
date_list = ['20181229', '20211229', '32101123']
result = min_max_date(date_list)
print(result)
纠正字符,变成正确的想要的字符,例如把’E’变成原本的’三’
def to_correct(cun):
'''
纠正数字,例如把'E'变成原本的'三'
:param cun:
:return:
'''
cun_list = list(''.join(cun))
error = {'E': '三', 'Z': '二'}
for i in range(len(cun_list)):
for key, value in zip(error.keys(), error.values()):
if cun_list[i] == key:
cun_list[i] = value
cun_text = ''.join(cun_list)
return cun_text
print(to_correct('E年'))
人民币换成标准格式(12,555,000)
money = 12555000
str1 = format(int(money), ",")
print(str1)
判断各种字符所属类型(汉字、数字、字母、小写大写字母等)
string = '25人民uA二'
for s in string:
if u'\u4e00' <= s <= u'\u9fff':
print('中文:', s)
if s.isnumeric():
print('中文数字:', s)
elif s.isdigit():
print('数字:', s)
elif s.isalpha():
print('字母(包含大小写):', s)
if s.isupper():
print('大写字母:', s)
elif s.islower():
print('小写字母:', s)