版权声明:@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()