python3检查子集csv数据是否全部存在全集中

前要:A中有n个csv文件,B中有m个csv文件,且B中csv文件为已知全集,需要检查A中n个csv文件中所有数据条例是否存在B中csv文件构成的全集中

处理想法:
1.首先将B中m个csv文件合并,得到一个全集csv文件

import os
import pandas as pd
import glob

csv_list = glob.glob('*.csv') #查看同文件夹下的csv文件数
print(u'共发现%s个CSV文件'% len(csv_list))
print(u'正在处理............')
for i in csv_list: #循环读取同文件夹下的csv文件
    fr = open(i,'rb').read()
    with open('result.csv','ab') as f: #将结果保存为result.csv
        f.write(fr)
print(u'合并完毕!')
df = pd.read_csv("result.csv",header=0)
df.info()
IsDuplicated = df.duplicated()

2.然后逐个读取A中csv文件的数据条例,并在得到的全集文件中去查找是否存在相符合的数据条例

import os
import pandas as pd
import glob
import csv
from xml.dom.minidom import Document

def IsContain(id,sn):
    """
    print(len(id))
    print(id)
    print(len(sn))
    print(sn)
    """
    fr = open("./result.csv")
    csvReader = csv.reader(fr)
    for line in csvReader:
        
        if(id == line[2] and sn == line[3]):
            #print(line[2],line[3])
            return True
        #else:
            #print("No such title")
            #return False
    print("No such title")
    print(line[2],line[3])
    return False
    
csv_list = glob.glob('./FilePath/*.csv') #查看同文件夹下的csv文件数
print(u'共发现%s个CSV文件'% len(csv_list))
print(u'正在处理............')

for i in csv_list: #循环读取同文件夹下的csv文件
    print(i)
    
    doc = Document()
    dataRoot = doc.createElement('ProdLogs')
    dataRoot.setAttribute('xmlns:xsi', "http://www.w3.org/2001/XMLSchema-instance")
    dataRoot.setAttribute('xsi:noNamespaceSchemaLocation', i+'.xsd')
    doc.appendChild(dataRoot)
    dataHeader = doc.createElement('Header')
    dataHeader.setAttribute('ManufacturerName','Name')
    dataHeader.setAttribute('FormatVersion','01.00.00')
    dataRoot.appendChild(dataHeader)

    dataLog = doc.createElement('Logs')
    dataLog.setAttribute('CreationDate','2021/10/14 10:51')
    
    fr = open(i)
    csvReader = csv.reader(fr)
    
    for line in csvReader:
        #print(len(line))
        if(len(line) != 2):
            continue
        if(IsContain(line[0].strip(),line[1]) == False):
            
            dataElt = doc.createElement('LogRecord')
            dataElt.setAttribute("id", line[0])
            dataElt.setAttribute("sn", line[1])
            dataLog.appendChild(dataElt)
            
        
        dataRoot.appendChild(dataLog)
        xmlFile = open(i+'.xml','w')
        xmlFile.write(doc.toprettyxml(indent = '\t'))
        xmlFile.close() 
print(u'检查完毕!')

处理完毕后会在csv文件同级目录生产xml文件,记录不存在的数据条例在其中

继续优化的点有:
1.考虑多线程,提升对比速度,或者考虑更好的算法
2.考虑全部脚本化设计,减少人为参与
3.考虑用户使用,做UI版本和打包运行程序

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值