本文源自工作中的需要:后台服务器采用主从设计(一共有俩系统来做负载均衡),在数据复制的过程中由于网络传输等因素,会出现两系统数据不一致的情况,我需要找到并修复它(本文只涉及如何“找到”)。
其实工作中经常会碰上这样的小问题,我们可以用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包下面的更多功能。
在数据量较大的情况下,这个解决方案一样可以胜任。