加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

对比两个csv文件记录差异

发布时间:2020-05-25 01:38:26 所属栏目:Python 来源:互联网
导读:对比两个csv文件记录差异

下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。

脚本之家小编现在分享给大家,也给大家做个参考。

# -*- coding:utf-8 -*-  
import csv
import os
class csvread():
    def __init__(self,filename,lstname):
        self.lstname = lstname#lstname 用于比对csv中相同列
        self.filename = filename
        self.header = self.fields()
        self.data = self.getdata()
        self.dataset = self.getset()

#test update		
#以字典方式获取csv数据
    def getdata(self):
        data = []
        with open(self.filename,newline = "") as csvfile:
            reader = csv.DictReader(csvfile)
            for row in reader:
                data.append(row)
        return data
#获取序列
    def getset(self):
        lst = set()
        for row in self.data:
            lst.add(row.get(self.lstname))

        return lst

#获取表头
    def fields(self):
        with open(self.filename,newline = "") as csvfile:
            reader = csv.reader(csvfile)
            fields = reader.__next__()

            return fields

    def __sub__(self,other):
        #diff表示公共序列的差集,即表1中存在而表2不存在的列
        diff = self.dataset - other.dataset
        rdata = []
       #根据diff生产基于表1的记录 
        for row in self.data:
            if row[self.lstname] in diff:
                rdata.append(row)

        f1 = os.path.basename(self.filename)
        f2 = os.path.basename(other.filename)
        f1 = f1.split('.')[0]
        f2 = f2.split('.')[0]

        filename = f1+'_'+f2+'.csv'
        filename = os.path.join(os.path.dirname(self.filename),filename)
       #写入csv文件 
        with open(filename,'w',newline="") as csvfile:
            writer = csv.DictWriter(csvfile,fieldnames=self.header)
            writer.writeheader()
            writer.writerows(rdata)    
        return filename

if __name__ == '__main__':
    import sys
#print(sys.argv[0])
#for i in sys.argv:

    filename1 = sys.argv[1]
    print(filename1)
    filename2 = sys.argv[2]

    print(filename1,filename2)

    file1 = csvread(filename1)
    file2 = csvread(filename2)
    file1-file2
    file2-file1

以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读