前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 利用dict去重对比csv文件差异

python 利用dict去重对比csv文件差异

作者头像
kirin
发布2021-04-19 16:28:44
1.4K0
发布2021-04-19 16:28:44
举报
文章被收录于专栏:Kirin博客Kirin博客

python 处理csv对比两个文件数据项的差异,输出文件

思路:

  • 1.分别读取文件得到list,并组装出需要查询并且去重后的list
  • 2.通过list组装成需要的dict
  • 3.通过去重后的list进行for循环 循环的每一项进行dict.get操作
  • 4.因为dict是用的链表,所以读取速度十分的快(描述错误请指正)
  • 5.重点的步骤是123,去重判断根据你的需求调整即可
  • 6.在后面会放上一份小demo供参考

首先由a.csv ,b.csv两个文件

a.csv使用csv模块读取文件 得到 alist

b.csv也同样读取文件得到blist

得到了两个列表之后,如果你需要去重,可以使用一个循环或者map得到一个dict

像这样

代码语言:javascript
复制
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取值操作,然后是对比操作
像这样
代码语言:javascript
复制
for index,xx in enumerate(set(need_find_list)):
    keya=a.get(xx)
    keyb=b.get(xx)
    # 这里就是一些对比操作了,
对比原理挺简单的,速度也还不错,比手动用excel对比快多了
代码语言:javascript
复制

代码语言:javascript
复制
demo:
代码语言:javascript
复制
# 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)
代码语言:javascript
复制
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-04-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档