前要: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版本和打包运行程序