python处理未知数据类型的字符,整型浮点型字符串转换为浮点型数字

python处理未知数据类型的字符,整型浮点型字符串转换为浮点型数字

def IsNum(str):
    """
    只能处理字符串,整型,浮点型返回True
    :param str:
    :return:
    """
    s = str.split('.')  # 考虑到浮点型有小数点的情况
    if len(s) > 2:
        return False
    else:
        for si in s:
            if not si.isdigit():
                return False
        return True


def DealStrOrNum(value):
    if isinstance(value, str):  # 判断是字符串
        if IsNum(value):  # 判断是整型或者浮点型字符串
            return float(value)  # 转换成浮点型
        else:
            return value  # 字符串,无法转换成浮点型
    elif isinstance(value, int) or isinstance(value, float): #如果字符本身就是整型,浮点型,直接返回
        return value


zzs102071Jbxx_data_from_tax_office = {'nsrmc': 'xxx有限公司', 'lxdh': '1234567891', 'khyh': '招商银行',
                                      'zjgnsrsbh': '00000000MA000XD94', 'zfzjgxsehj': '142', 'ybxssr': '36.00',
                                      'ybfpse': '0.00', 'jzjtfpbl': '0.000000', 'ysxssr': '35.00', 'ysfpse': '0.00',
                                      'ysjzjtfpbl': '0.000000', 'yydz': '武汉市江岸区',
                                      'fddbrxm': '小明', 'yhzh': '100000000601', 'ytbse': '0.00',
                                      'zjgnsrgdfpbl': '0.100000', 'ybfpbl': '0.550000', 'jzjtxssr': '0.00',
                                      'jzjtfpse': '0.00', 'ysfpbl': '0.550000', 'ysjzjtxssr': '0.00',
                                      'ysjzjtfpse': '0.00', 'sbbId': 10025, 'nsrsbh': '914209990000XD94'}
                                      
print(zzs102071Jbxx_data_from_tax_office)

for item in zzs102071Jbxx_data_from_tax_office:
    zzs102071Jbxx_data_from_tax_office[item] = DealStrOrNum(zzs102071Jbxx_data_from_tax_office[item])
    
print(zzs102071Jbxx_data_from_tax_office)

需要注意的是,以上的代码没有考虑到负数的情况,以下的代码可以判断整数,浮点数

    def is_number(num):
        s = str(num)
        if s.count('.') == 1:  # 小数
            new_s = s.split('.')
            left_num = new_s[0]
            right_num = new_s[1]
            if right_num.isdigit():
                if left_num.isdigit():
                    return True
                elif left_num.count('-') == 1 and left_num.startswith('-'):  # 负小数
                    tmp_num = left_num.split('-')[-1]
                    if tmp_num.isdigit():
                        return True
        elif s.count(".") == 0:  # 整数
            if s.isdigit():
                return True
            elif s.count('-') == 1 and s.startswith('-'):  # 负整数
                ss = s.split('-')[-1]
                if ss.isdigit():
                    return True
        return False

你可能感兴趣的:(python相关问题,python)