ITPub博客

首页 > 应用开发 > Python > 玩转python字符串——工资字符串

玩转python字符串——工资字符串

原创 Python 作者:一只小木鱼 时间:2020-12-24 16:47:44 0 删除 编辑

以下情况形如[“1.5-2千/月”,"1.5-2万/月",“15-20万/年”,"40-60万/年"]的列表(为了简化计算),以下函数可以直接使用。

要求:

(1)区分最高薪资与最低薪资

(2)统一单位为千/月

(3)保留两位有效小数,多余位数不补0,整数只保留整数


1、正则表达式,匹配出每个对应的值

_pattern = re.compile(r'(\d+(?:\.\d+)?)-(\d+(?:\.\d+)?)([千万])/([月年])')

2、取出findall的值

_ret = re.findall(_pattern, salary)

结果形如[("1.5","2","千","月")]的列表

3、位数函数,保留两位有效数字,多余位数不补0

def re_process(ret):
    if float(ret).is_integer():
        answer = str(ret).replace('.0', '')
    else:
        answer = round(float(ret), 2)
        answer = str(answer).rstrip('0')
    return answer

4、主函数

def salary_cal(salary):
    _pattern = re.compile(r'(\d+(?:\.\d+)?)-(\d+(?:\.\d+)?)([千万])/([月年])')
    _ret = re.findall(_pattern, salary)
    h_salary = ''
    l_salary = ''
    if _ret:
        _ret = _ret[0]
        if _ret[2] == '千' and _ret[3] == '月':
            h_salary = _ret[1] + '千/月'
            l_salary = _ret[0] + '千/月'
        elif _ret[2] == '万':
            if _ret[3] == '月':
                h_salary = str(re_process(Decimal(_ret[1]) * 10)) + '千/月'
                l_salary = str(re_process(Decimal(_ret[0]) * 10)) + '千/月'
            else:
                h_salary = str(re_process(Decimal(_ret[1]) * 10)) + '千/月'
                l_salary = str(re_process(Decimal(_ret[0]) * 10)) + '千/月'
    return l_salary, h_salary

返回处理值,(最低薪资,最高薪资)


5、测试,测试函数

lst = []
for i in ret:
    h, l = salary_cal(str(i))
    lst.append([h, l])
print(lst)
lst的结果为[[最低薪资,最高薪资],[最低薪资,最高薪资],....]的一个二维列表
以上就是这个功能的全部介绍,上源代码!
import pandas as pd
import re
from decimal import Decimal
a = pd.read_csv('message.csv')
ret = list(a['薪资'].fillna('-'))
def re_process(ret):
    if float(ret).is_integer():
        answer = str(ret).replace('.0', '')
    else:
        answer = round(float(ret), 2)
        answer = str(answer).rstrip('0')
    return answer
def salary_cal(salary):
    _pattern = re.compile(r'(\d+(?:\.\d+)?)-(\d+(?:\.\d+)?)([千万])/([月年])')
    _ret = re.findall(_pattern, salary)
    h_salary = ''
    l_salary = ''
    if _ret:
        _ret = _ret[0]
        if _ret[2] == '千' and _ret[3] == '月':
            h_salary = _ret[1] + '千/月'
            l_salary = _ret[0] + '千/月'
        elif _ret[2] == '万':
            if _ret[3] == '月':
                h_salary = str(re_process(Decimal(_ret[1]) * 10)) + '千/月'
                l_salary = str(re_process(Decimal(_ret[0]) * 10)) + '千/月'
            else:
                h_salary = str(re_process(Decimal(_ret[1]) * 10)) + '千/月'
                l_salary = str(re_process(Decimal(_ret[0]) * 10)) + '千/月'
    return l_salary, h_salary
lst = []
for i in ret:
    h, l = salary_cal(str(i))
    lst.append([h, l])
print(lst)


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69991606/viewspace-2745054/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 字符串格式化
请登录后发表评论 登录
全部评论

注册时间:2020-12-24

  • 博文量
    12
  • 访问量
    6202