EXCEL表格转化为XML格式文件
这里给出一个例子:
将get_1.csv文件转化为xml格式文件。
同时将里面的正文部分用jieba进行切词,使得正文每一个词都带有id和词性:
from xml.dom.minidom import Document
import xml.dom.minidom
import jieba
import jieba.posseg as pseg
import xlrd
import csv
class XmlMaker:
def __init__(self,txtpath,xmlpath):
self.txtPath = txtpath
self.xmlPath = xmlpath
self.txtList = []
def readtxt(self):
txtfile = open(self.txtPath,"r",encoding='gbk',errors='ignore')
self.txtList = txtfile.readlines()
for i in self.txtList:
oneline = i.strip().split(",")
if len(oneline) != 9:
print("TxtError")
def makexml(self):
doc = Document()
orderpack = doc.createElement("body")
doc.appendChild(orderpack)
objecname_chapter = "chapter"
objecname_item = "item"
objecname_stament = "stament"
temp_chapter = 0
temp_item = 0
temp_stament = 0
x = 0
num = 0
objectc = doc.createElement(objecname_chapter)
objecti = doc.createElement(objecname_item)
for i in self.txtList:
oneline = i.strip().split(",")
if x ==0 :
oneline = i.strip().split(",")
chapter = doc.createElement(objecname_chapter)
chapter.setAttribute("cid", oneline[0])
item = doc.createElement(objecname_item)
item.setAttribute("iid", oneline[1])
else :
if oneline[0] != temp_chapter:
chapter = doc.createElement(objecname_chapter)
chapter.setAttribute("cid", oneline[0])
if oneline[1] != temp_item:
item = doc.createElement(objecname_item)
item.setAttribute("iid", oneline[1])
if oneline[2] and oneline[2] != "-" :
stament = doc.createElement(objecname_stament)
stament.setAttribute("sid", oneline[2])
objectappname = doc.createElement("object")
if oneline[3] and oneline[3] != "-" :
objectappnametext = doc.createTextNode(oneline[3])
objectappname.appendChild(objectappnametext)
stament.appendChild(objectappname)
if oneline[4] and oneline[4] != "-" :
objectappname = doc.createElement("effect")
objectappnametext = doc.createTextNode(oneline[4])
objectappname.appendChild(objectappnametext)
stament.appendChild(objectappname)
if oneline[5] and oneline[5] != "-" :
objectappname = doc.createElement("Main_item")
objectappnametext = doc.createTextNode(oneline[5])
objectappname.appendChild(objectappnametext)
stament.appendChild(objectappname)
if oneline[6] and oneline[6] != "-" :
objectappname = doc.createElement("predicate")
objectappnametext = doc.createTextNode(oneline[6])
objectappname.appendChild(objectappnametext)
stament.appendChild(objectappname)
if oneline[7] and oneline[7] != "-" :
objectappname = doc.createElement("Guest")
objectappnametext = doc.createTextNode(oneline[7])
objectappname.appendChild(objectappnametext)
stament.appendChild(objectappname)
if oneline[8] and oneline[8] != "-" :
list1 = pseg.lcut(oneline[8])
for n in range(len(list1)):
if list1 != " /x":
temp = str(list1[n])
sp = temp.split("/")
num = num + 1
original = doc.createElement("original")
original.setAttribute("sid", str(num))
original.setAttribute("type", sp[1])
objectappnametext = doc.createTextNode(sp[0])
original.appendChild(objectappnametext)
stament.appendChild(original)
# seg_list = jieba.lcut(oneline[8], cut_all=False)
# list1 = pseg.lcut(oneline[8])
#
# lent = len(list1)
# for n in range(len(list1)):
# if list1 != " /x":
# temp = str(list1[n])
# sp = temp.split("/")
# objectappname = doc.createElement("original id =" + str(num) + ",wtype =" +str(sp[1]))
# num = num + 1
# objectappnametext = doc.createTextNode(sp[0])
# objectappname.appendChild(objectappnametext)
# stament.appendChild(objectappname)
temp_chapter = oneline[0]
temp_item = oneline[1]
x = x + 1
item.appendChild(stament)
chapter.appendChild(item)
orderpack.appendChild(chapter)
f = open(self.xmlPath, 'w')
doc.writexml(f, indent='\t', newl='\n', addindent='\t', encoding='gbk')
f.close()
# print(doc.childNodes)
#
# print(doc.firstChild)
# print(doc.lastChild)
if __name__ == "__main__":
read =XmlMaker("get_1.csv","test.xml")
read.readtxt()
read.makexml()
print(read.txtPath)
for i in read.txtList:
print(i)
其中orderpack = doc.createElement(“body”)存放的是本xml文件中的所有信息。
original.setAttribute(“sid”, str(num)) #给这条元素设置特征
original.appendChild(objectappnametext) #给这条元素添加子元素
其中orderpack下面有chapter,chapter下面有item,item下面有statment。
其中一个章的文件存放在同一章内,同一条也存放在同一条内。
至于csv源文件如下所示:
章,条,句,标的,作用,主项,谓项,宾项,原文
-,-,1,本文,标题,(),贷款通则,-,贷款通则
1,-,2,本章,标题,总则,-,-,第一章总则
1,1,3,本文,宗旨,作者,制定^通则,-,第一条 为了规范贷款行为,维护借贷双方的合法权益,保证信贷资产的安全,提高贷款使用的整体效益,促进社会经济的持续发展,根据《中华人民共和国中国人民银行法》、《中华人民共和国商业银行法》等有关法律规定,制定本通则。
1,2,4,贷款人,内涵,贷款人,系指^#金融机构,-,第二条 本通则所称贷款人,系指在中国境内依法设立的经营贷款业务的中资金融机构。
1,2,5,借款人,内涵,借款人,系指^#法人/其他经济组织/个体工商户/自然人,-,本通则所称借款人,系指从经营贷款业务的中资金融机构取得贷款的法人、其他经济组织、个体工商户和自然人。
1,2,6,贷款,内涵,贷款,系指^#货币资金,-,本通则中所称贷款系指贷款人对借款人提供的并按约定的利率和期限还本付息的货币资金。
1,2,7,贷款币种,外延,贷款.币种,包含^人民币和外币,-,本通则中的贷款币种包括人民币和外币。
1,3,8,贷款发放/贷款使用,外延,(贷款人)/(借款人),应符合^#法律/行政法规/行政规章/原则,-,第三条 贷款的发放和使用应当符合国家的法律、行政法规和中国人民银行发布的行政规章,应当遵循效益性、安全性和流动性的原则。
1,4,9,借款人/贷款人,外延,(借款人)/(贷款人),应遵循^#原则,-,第四条 借款人与贷款人的借贷活动应当遵循平等、自愿、公平和诚实信用的原则。
1,5,10,贷款人,外延,贷款人,应遵循^#原则,-,第五条 贷款人开展贷款业务,应当遵循公平竞争、密切协作的原则,不得从事不正当竞争。
1,6,11,监管机关,限定,人民银行 /(人民银行)分支机构,是^监管机关,《贷款通则》,第六条 中国人民银行及其分支机构是实施《贷款通则》的监管机关。
,,,,,,,,
2,-,12,本章,章题,,,,第二章贷款种类
2,7,13,贷款种类,外延,,,,第七条 自营贷款、委托贷款和特定贷款:
2,7,14,自营贷款,内涵,,,,自营贷款,系指贷款人以合法方式筹集的资金自主发放的贷款,其风险由贷款人承担,并由贷款人收回本金和利息。
2,7,15,委托贷款,内涵,,,,委托贷款,系指由政府部门、企事业单位及个人等委托人提供资金,由贷款人(即受托人)根据委托人确定的贷款对象、用途、金额期限、利率等代为发放、监督使用并协助收回的贷款。贷款人(受托人)只收取手续费,不承担贷款风险。
2,7,16,特定贷款,内涵,,,,特定贷款,系指经国务院批准并对贷款可能造成的损失采取相应补救措施后责成国有独资商业银行发放的贷款。
2,8,17,贷款种类,外延,,,,第八条 短期贷款、中期贷款和长期贷款:
2,8,18,短期贷款,内涵,,,,短期贷款,系指贷款期限在1年以内(含1年)的贷款。
2,8,19,中期贷款,内涵,,,,中期贷款,系指贷款期限在1年以上(不含1年)5年以下(含5年)的贷款。
2,8,20,长期贷款,内涵,,,,长期贷款,系指贷款期限在5年(不含5年)以上的贷款。
2,9,21,贷款种类,外延,,,,第九条 信用贷款、担保贷款和票据贴现:
2,9,22,信用贷款,内涵,,,,信用贷款,系指以借款人的信誉发放的贷款。
2,9,23,贷款种类,外延,,,,担保贷款,系指保证贷款、抵押贷款、质押贷款。
2,9,24,保证贷款,内涵,,,,保证贷款,系指按《中华人民共和国担保法》规定的保证方式以第三人承诺在借款人不能偿还贷款时,按约定承担一般保证责任或者连带责任而发放的贷款。
2,9,25,抵押贷款,内涵,,,,抵押贷款,系指按《中华人民共和国担保法》规定的抵押方式以借款人或第三人的财产作为抵押物发放的贷款。
2,9,26,质押贷款,内涵,,,,质押贷款,系指按《中华人民共和国担保法》规定的质押方式以借款人或第三人的动产或权利作为质物发放的贷款。
2,9,27,票据贴现,内涵,,,,票据贴现,系指贷款人以购买借款人未到期商业票据的方式发放的贷款。
2,10,28,担保,限定,,,,第十条 除委托贷款以外,贷款人发放贷款,借款人应当提供担保。
2,10,29,担保-审查,限定,,,,贷款人应当对保证人的偿还能力、抵押物、质物的权属和价值以及实现抵押权、质权的可行性进行严格审查。
2,10,30,担保,限定,,,,经贷款审查、评估,确认借款人资信良好,确能偿还贷款的,可以不提供担保。
其中如果为空行则直接省略,不显示。