在python对数据进行存储的时候,经常会遇到类型的错误,或者缺少某字段存储是吧。就随手写了一个简单的工具类
1,判断值是否是int
# 通过抛出异常
def is_int_by_except(value):
value = str(value)
try:
int(value)
return True
except ValueError:
# print "%s ValueError" % value
return False
我是通过最常见的异常做处理
2,判断值是否是float
def is_float_by_except(string):
str1 = str(string)
if str1.count('.') != 1: # 判断小数点是不是大于1
return False
elif str1.isdigit():
return False # 判断是不是整数
else:
new_str = str1.split('.') # 按小数点分割字符
frist_num = new_str[0] # 取分割完之后这个list的第一个元素
if frist_num.count('-') > 1: # 判断负号的格数,如果大于1就是非法的
return False
else:
frist_num = frist_num.replace('-', '') # 把负号替换成空
if frist_num.isdigit() and new_str[1].isdigit():
# 如果小数点两边都是整数的话,那么就是一个小数
return True
else:
return False
判断是否是float的方法有很多,只要能实现都可以
3,然后就是调用方法check值的类型
def check_result_type(result):
"""
检查存储结果的类型
:param result: 需要格式化的结果
:return:
"""
if is_int_by_except(result):
return int(result)
elif is_float_by_except(result):
return float(result)
else:
return result
其实很简单不是嘛,调用一下就可以了
4,然后就是数据的补全并赋值“0”
def format_result(result, rows):
"""
格式化补全结果
:param result:结果
:param rows: 行
:return: 格式化后的结果
"""
for row in rows.keys():
if row in result.keys():
result[row] = check_result_type(result[row])
else:
if rows.get(row) == "int":
result[row] = 0
elif rows.get(row) == "float":
result[row] = 0.00
else:
result[row] = "0"
return result
python写起来很舒服。
5,写个main方法库测试一下
class CheckResultType(object):
def __init__(self):
self.result = {"id": "2333", "name": "张三", "value": 1111, "type": 9, "keyword_task_id": 3222.0}
def format_result(self):
types = {"id": "int",
"name": "string",
"value": "float",
"type": "int",
"keyword_task_id": "int",
"class": "int"}
print format_result(self.result, types)
if __name__ == '__main__':
CheckResultType().format_result()
简单直接。