利用Python&Pandas查找主从系统间不一致的数据

xiaoxiao2021-02-28  13

写在前面

本文源自工作中的需要:后台服务器采用主从设计(一共有俩系统来做负载均衡),在数据复制的过程中由于网络传输等因素,会出现两系统数据不一致的情况,我需要找到并修复它(本文只涉及如何“找到”)。

其实工作中经常会碰上这样的小问题,我们可以用Java去读文件,存进set,然后比较……

但是用Python和Pandas这个库,我们可以仅用10行以内的代码做到,简单且方便

工具

Python 3.6 & Pandas

正文

先抽取出要比较的数据,出于数据保护,在此我不使用真实数据,而是自己伪造一些数据。

这是我的文件结构,files里面放的是准备使用的数据:

w71.txt:

w72.txt:

很明显能看出,在复制的过程中,w71系统上的Number为5的数据没有被复制到w72上,而w72系统上的Number为3的数据没有被复制到w71上。

实现代码很简单:

import pandas as pd # 读取数据 dfW71 = pd.read_table('./files/w71.txt' ) dfW72 = pd.read_table('./files/w72.txt') # 将数据去重后构造成set sW71 = set(dfW71['Number'].unique()) sW72 = set(dfW72['Number'].unique()) # 找到w71和w72系统中不同的数据 print("w71 - w72 :", sW71 - sW72) print("w72 - w71 :", sW72 - sW71)

输出:

就这样简单的找到了相差的数据, 之后就可以愉快的修复数据不一致的问题啦。

总结

在本文中,我们仅用了7行代码就完成了一个包含文本读入和比较的功能。

虽然这个功能很简单,但是相比较Java的实现,我们节省了非常多的时间,这很好的佐证了“人生苦短,我用Python”这句话。

值得一提的是,Pandas是Python中常用来做数据分析的包,实际是用C实现的,所以不要担心它的性能,如果你有更高级的比较需要,可以挖掘Pandas包下面的更多功能。

在数据量较大的情况下,这个解决方案一样可以胜任。

转载请注明原文地址: https://www.6miu.com/read-2799960.html

最新回复(0)