获取指定磁盘文件并将xml文件转换为txt再由txt转换为xls文件完整版

版权声明:@liaogaoyong https://blog.csdn.net/qq_42455710/article/details/88872840
from xml.etree import ElementTree as ET
import os,xlwt

FindPath = "D:\parseXml"
#获取指定磁盘下的xml文件列表#1
def getXmlFiledir(FindPath):
    suffix='.xml'#文件后缀
    FileList = []
    FileNames = os.listdir(FindPath)
    for filename in FileNames:
        name, suf = os.path.splitext(filename)  # =>文件名,文件后缀
        if suf == suffix:
            FileList.append(os.path.join(FindPath, filename))  # =>吧一串字符串组合成路径
    return FileList

#获取指定磁盘下的txt文件列表#1
def getTxtFiledir(FindPath):
    suffix='.txt'#文件后缀
    FileList = []
    FileNames = os.listdir(FindPath)
    for filename in FileNames:
        name, suf = os.path.splitext(filename)  # =>文件名,文件后缀
        if suf == suffix:
            FileList.append(os.path.join(FindPath, filename))  # =>吧一串字符串组合成路径
    return FileList

#删除指定磁盘下的txt文件
def deleteTxtFile(FindPath):
    fileLists = getTxtFiledir(FindPath)
    for file in fileLists:
        print(file)
        os.remove(file)

#获取要解析的文件路径并传入etree()解析#2
def runParseToXls():
    for xmlfilename in getXmlFiledir(FindPath):
        # 直接解析xml文件
        tree = ET.parse(xmlfilename)
        # 获取xml文件的根节点
        root = tree.getroot()
        #调用递归函数生成需要的txt文件
        etree(xmlfilename,root)
    for txtfilename in getTxtFiledir(FindPath):
        #调用txt转xls函数
        txtToxls(txtfilename)

#递归遍历xml文件中的tag,value,desc属性值#3
def etree(filePath, root):
    name, suf = os.path.splitext(filePath)  # =>文件名,文件后缀
    for child in root:
        if (root.getchildren() is None):
            break
        else:
            with open(name+".txt",'a',encoding="utf-8") as createfilePath:
                createfilePath.writelines(str(child.tag)+"**"+str(child.get("value"))+"**"+str(child.get("desc"))+"\n")
            print("tag--"+str(child.tag), "value--"+str(child.get("value")),"desc--"+str(child.get("desc")))
            etree(filePath,child)#递归调用遍历子节点

#将txt转换为xls#4
def txtToxls(filename):  #文本转换成xls的函数,filename 表示一个要被转换的txt文本,xlsname 表示转换后的文件名
    name, suf = os.path.splitext(filename)  # =>文件名,文件后缀
    sufs = ".xls"  # 要保存的文件类型
    print('converting xls ... ')
    book = xlwt.Workbook()
    sheet = book.add_sheet('sheet1', cell_overwrite_ok=True)  # 生成excel的方法,声明excel
    tall_style = xlwt.easyxf("font:height 300")  # 字体风格与大小
    title = ["tag", "value", "desc"]  # 标题列表
    for i in title:
        sheet.write(0, title.index(i), i)  # 循环写入标题
    col0 = sheet.col(0)
    col1 = sheet.col(1)
    row0 = sheet.row(0)
    col2 = sheet.col(2)
    col0.width = 120 * 80  # 第一列宽
    col1.width = 120 * 80  # 第二列宽
    col2.width = 150 * 80  # 第三列宽
    row0.set_style(tall_style)  # 为第一行设置风格
    f = open(filename,'r',encoding="utf-8")    #打开txt文本进行读取
    x = 1                #在excel开始写的位置(y)
    y = 0                #在excel开始写的位置(x)
    while True:  #循环,读取文本里面的所有内容
        line = f.readline() #一行一行读取
        if not line:  #如果没有内容,则退出循环
            break
        for i in line.split('**'):#读取出相应的内容写到x
            item=i.strip()
            sheet.write(x,y,item)
            y += 1 #另起一列
        x += 1 #另起一行
        y = 0  #初始成第一列
    f.close()
    # 判断一下文件是否存在,如果存在删除,不存在直接创建保存
    file = name + sufs  # 文件的路径与文件名类型
    if (os.path.exists(file)):
        os.remove(file)
        book.save(file)  # 保存到指定磁盘中
    else:
        book.save(file)  # 保存到指定磁盘中

if __name__ == "__main__":
    #将存在的txt文件删除
    deleteTxtFile(FindPath)
    #调用函数将xml文件生成xls文件
    runParseToXls()

猜你喜欢

转载自blog.csdn.net/qq_42455710/article/details/88872840
今日推荐