一段简短的小程序,用于检查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!")
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐