今天是入职新公司整一个月,之前领导一直让我写的工时我一直没补,工作忙完了我终于记得把工时给补上,心里不装着什么事儿的是真的舒服。
昨天领导交给我一个任务,让我对比两个数据的一致性,大体需求是说一部分数据是目前爬出来或者客户提供的,另一部分数据是根据前面这些数据插入到Oracle表中的,领导让我检查一下她插入的数据是否有遗漏或不一致,给了我验证插入数据的一个字段,这个字段是一个编码怎么说呢,一眼望去都是密密麻麻的数字,简直令人眼瞎,以下是经过修改的部分数据代码:
手工验证完毕像这样的数据量我着实懵逼,用肉眼看那不得看瞎了,怎么办呢,于是我想了第一个解决方案使用代码对比工具,在线对比两批数据是否一致,不过这个工具没有记录功能,加上我脑子不是很好用,所以我常常贴着贴着 # 就忘记了哪里是源数据,哪里是Oracle数据库里的数据,再加上这个不是我写的软件真的是不好用。我开始尝试第二个方案,将要对比的数据放到一个列表里进行对比,使用Python代码的形式,听起来那就高级多了。但是糟糕,由于这些数据都是什么00开头的,在Python中以00开头的数据好像就不是10进制,这个办法作废.于是我想要不将所有的数据都加上引号,全部变成字符串那这样解决问题不是很好. # 可惜啊可惜,想使用chatgpt处理这么大量的数据,想表达清楚我的需求以及全部处理完毕,需要的时间和耗费的精力,那不是我可以承受的,我索性再换一种方案。我将源数据 存到一张文档里 再将数据库的数据查出来 在存到一张文档里,读取出来的数据,进行存到列表里,通过对比两个列表是否一致,这样解决问题就堪称完美.但可是,可但是就在我沾沾自喜的时候 # 我发现list类型 要内容一致 并且还需要顺序一致,但是我两个数据的顺序未必一致,于是我通过list转换为set进行对比,set是无序的,问题解决,以下是代码
def data_duibi(filepath1,filepath2):
list1 = []
list2 = []
with open(filepath1, 'r', encoding='utf-8') as file:
for line in file:
list1.append(str(line).replace('\n', ''))
list1.sort()
print(list1)
with open(filepath2, 'r', encoding='utf-8') as file:
for line in file:
list2.append(str(line).replace('\n', ''))
list2.sort()
print(list2)
if list1 == list2:
print(True)
else:
set1 = set(list1)
set2 = set(list2)
# 数据库数据中存在,原数据数据不存在
difference = set2.difference(set1)
# 原数据中存在,目标数据数据不存在
difference2 = set1.difference(set2)
print('数据库数据中存在,原数据数据不存在------>',difference)
print('原数据中存在,目标数据数据不存在 ------->',difference2)
# 肉类
data_duibi(r'C:\Users\User\Desktop\data\肉类source_data.txt',r'C:\Users\User\Desktop\data\肉类_MYSQL数据.txt')