一段简短的小程序,用于检查csv文件中数据是否满足需求,最后不满足的数据组会被输出到同名xml文件中
#!/usr/bin/python
#CSVtoXML.py
#encoding:utf-8
import csv, os
from xml.dom.minidom import Document
#prfixFile = "creature_data"
def check_NSC_Res(NSC_ID,Res):#检查函数,可以根据自己需求描述
flag = True
for i in range(10):
#print(i);
#print(NSC_ID[i+1])
#print(Res[16*3 + i*2 + 1])
if(NSC_ID[i+1] != Res[16*3 + i*2 + 1]):
flag = False
#print(flag)
return flag
def check_data(Chipid,NSC_ID,Res):
if(Chipid in Res and check_NSC_Res(NSC_ID,Res)):
return True
else:
return False
def checkXMLFile(filePrefix):
csvFile = open(filePrefix+'.csv');
headLine = csvFile.readline()
#print headLine
typeList = headLine.split(',')
doc = Document()
dataRoot = doc.createElement('ProdLogs')
dataRoot.setAttribute('xmlns:xsi', "http://www.w3.org/2001/XMLSchema-instance")
dataRoot.setAttribute('xsi:noNamespaceSchemaLocation', filePrefix+'.xsd')
doc.appendChild(dataRoot)
dataHeader = doc.createElement('Header')
dataHeader.setAttribute('STBManufacturerName','Bedinsat')
#dataHeader.setAttribute('STBTechnicalModelName','S1226A')
#dataHeader.setAttribute('STBDistributorName','Bedinsat')
#dataHeader.setAttribute('STBDistributorModelName','BS9900s')
dataHeader.setAttribute('FormatVersion','01.00.00')
dataRoot.appendChild(dataHeader)
#csvReader = csv.reader(csvFile)
#total = len(csvFile.readlines())
dataLog = doc.createElement('Logs')
dataLog.setAttribute('CreationDate','2021/03/30 10:51')
total = 0
csvReader = csv.reader(csvFile)
for line in csvReader:
#print line
#total+=1
dataElt = doc.createElement('LogRecord')
for i in range(len(typeList)):
typeList[i] = typeList[i].strip("\n")
#print(typeList[i])
if typeList[i] == ("ChipId"):
#line[i] = line[i].replace(" ","")
chipid = line[i]
#print(line[i])
if typeList[i] == ("CardlessSmartcardNumber"):
line[i] = line[i].replace(" ","")
NSC_ID = line[i]
#print(line[i])
if typeList[i] == ("Res"):
res = line[i]
#print(line[i])
dataElt.setAttribute(typeList[i], line[i])
if(check_data(chipid,NSC_ID,res) == False):
total+=1
print("not ok")
dataLog.appendChild(dataElt)
dataLog.setAttribute('NumberOfRecords',str(total))
dataRoot.appendChild(dataLog)
xmlFile = open(filePrefix+'.xml','w')
xmlFile.write(doc.toprettyxml(indent = '\t'))
xmlFile.close()
def main():
for root, dirs, files in os.walk(os.getcwd()):
for fname in files:
index = fname.find('.csv')
if index > 0:
#print index, fname[:index]
checkXMLFile(fname[:index])
print("Transform " + fname + " OK!")
if __name__ == '__main__':
main()
input("Over!")