python 处理csv对比两个文件数据项的差异,输出文件
思路:
首先由a.csv ,b.csv两个文件
a.csv使用csv模块读取文件 得到 alist
b.csv也同样读取文件得到blist
得到了两个列表之后,如果你需要去重,可以使用一个循环或者map得到一个dict
像这样
adict=[]
need_find_list
for x in alist:
adict[x[0]]=x # 列中每一行作为key值,dict自带去重功能,后面覆盖前面的重复值
need_find_list.append(x[0]) # 加入list中作为key为后面提供取值查询对比
bdict也是一样,就不写了
得到了需要的两个dict 和一个查询的list后循环list在每一项循环中对dict进行get取值操作,然后是对比操作
像这样
for index,xx in enumerate(set(need_find_list)):
keya=a.get(xx)
keyb=b.get(xx)
# 这里就是一些对比操作了,
对比原理挺简单的,速度也还不错,比手动用excel对比快多了
demo:
# coding:utf-8
#当前系统日期时间:2021/4/15 9:28
#用于创建文件的IDE的名称: PyCharm
import time
import pandas
start=time.time()
pd=pandas.read_csv('./new.csv',engine='python',encoding='utf-8')
ss=pd.drop_duplicates(keep='first',inplace=False)
pd1=pandas.read_csv('./old.csv',engine='python',encoding='utf-8')
ss1=pd1.drop_duplicates(keep='first',inplace=False)
a={}
''' {'pn':['pn','vender','stock']}''' # 数据格式
alist=[]
for x in ss.values:
# print(x)
a[x[0]]=x
alist.append(x[0])
b={}
blist=[]
for x in ss1.values:
b[x[0]]=x
blist.append(x[0])
stock_unequal_count=0
stock_equal_count=0
txt=open('./out.txt','a+',encoding='utf-8')
stock_unequal=[] # stock 不相等
pn_unfind=[]
stock_equal=[]
for index,xx in enumerate(set(blist)):
print(index)
keya=a.get(xx)
keyb=b.get(xx)
try:
if keya is not None and keyb is not None:
if keya[2]!=keyb[2]:
if type(keya[2]) != type(keyb[2]):
if int(str(keya[2]).replace(',',''))!=int(str(keyb[2]).replace(',','')):
print('find unequal','a=> ', keya, 'b=> ', keyb)
stock_unequal.append([keya[0], keya[2], keyb[2]])
stock_unequal_count += 1
else:
stock_equal.append([keya[0], keya[2], keyb[2]])
stock_equal_count += 1
print('值不相等')
# cha.append([keya[0], keya[2], keyb[2]])
else:
print('类型不相等')
else:
print('数据不相等')
else:
pn_unfind.append(xx)
except Exception as e:
print(e)
print('a', len(a))
print('b',len(b))
print('不相等数据',stock_unequal_count)
print('相同的数据',stock_equal_count)
print('未找到',len(pn_unfind))
print(time.time()-start)