Python 每日一练(6)
引言
- 今天的练习可以说是昨天的那个的反操作,今天要尝试将
xls
文件的内容写入xml
文件中 - 所涉及到的库有
xml,xlrd
xls文件内容写入xml
python
操作excel
主要用到xlrd
和xlwt
这两个库,即xlrd
是读excel
,xlwt
是写excel
的库(就是上一篇用到的那个库)。- 而今天的另一个主角
xml
又是一个什么呢? xml
指的是可扩展标记语言eXtensible Markup Language
,和json
类似也是用于存储和传输数据,还可以用作配置文件。类似于HTML
超文本标记语言,但是HTML
所有的标签都是预定义的,而xml
的标签可以随便定义。- 有关
python
解析xml
可以看一下这篇文章:https://blog.csdn.net/kongsuhongbaby/article/details/84869838
编程实现分析
- 这次要做的事可以分为以下几步:读取
xls
文件内容,将其数据转换成字典存储,创建xml
文件并写入 - 首先是,读取并解析
xls
文件数据
def GetXlsData(filepath): file = xlrd.open_workbook(filepath)#打开一个xls文件,若文件名含有中文,则filepath前要加一个r,写作r‘filepath‘ sheet = file.sheet_by_index(0) #通过索引来获取工作表,也可以选择用名称来获取,则使用sheet_by_name(sheet_name) content = {} for i in range(sheet.nrows):#sheet.nrows用于获取有效的行数,即写有数据的行 content.setdefault(sheet.row_values(i)[0],sheet.row_values(i)[1:]) #将xls文件中数据存入字典,第一个表示序号的当作key,后面的元素当作value return(content)
- xml的操作
def WriteXml(content): xmlfile = minidom.Document()#创建xml文件 root = xmlfile.createElement(‘root‘)#创建节点 students = xmlfile.createElement(‘students‘)#创建节点 xmlfile.appendChild(root) #在文件中添加root节点 root.appendChild(students) #在root下添加students节点 comment = xmlfile.createComment(‘学生信息表 "id" : [名字, 数学, 语文, 英文]‘) students.appendChild(comment) #在students标签下添加comment xmlcontent = xmlfile.createTextNode(str(content)) #创建文本节点 students.appendChild(xmlcontent) #在students标签下添加文本内容 with open(‘Student.xml‘,‘wb‘) as f: f.write(xmlfile.toprettyxml(newl=‘\n‘,encoding = ‘utf-8‘)) #写入文件
- 完整代码
# -*- coding:utf-8 -*- # Author:Konmu ‘‘‘ 将 第 0014 题中的 student.xls 文件中的内容写到 student.xml 文件中,如 下所示: <?xml version="1.0" encoding="UTF-8"?> <root> <students> <!-- 学生信息表 "id" : [名字, 数学, 语文, 英文] --> { "1" : ["张三", 150, 120, 100], "2" : ["李四", 90, 99, 95], "3" : ["王五", 60, 66, 68] } </students> </root> ‘‘‘ import xlrd import xml.dom.minidom as minidom def GetXlsData(filepath): file = xlrd.open_workbook(filepath)#打开一个xls文件,若文件名含有中文,则filepath前要加一个r,写作r‘filepath‘ sheet = file.sheet_by_index(0) #通过索引来获取工作表,也可以选择用名称来获取,则使用sheet_by_name(sheet_name) content = {} for i in range(sheet.nrows):#sheet.nrows用于获取有效的行数,即写有数据的行 content.setdefault(sheet.row_values(i)[0],sheet.row_values(i)[1:]) #将xls文件中数据存入字典,第一个表示序号的当作key,后面的元素当作value return(content) def WriteXml(content): xmlfile = minidom.Document()#创建xml文件 root = xmlfile.createElement(‘root‘)#创建节点 students = xmlfile.createElement(‘students‘)#创建节点 xmlfile.appendChild(root) #在文件中添加root节点 root.appendChild(students) #在root下添加students节点 comment = xmlfile.createComment(‘学生信息表 "id" : [名字, 数学, 语文, 英文]‘) students.appendChild(comment) #在students标签下添加comment xmlcontent = xmlfile.createTextNode(str(content)) #创建文本节点 students.appendChild(xmlcontent) #在students标签下添加文本内容 with open(‘Student.xml‘,‘wb‘) as f: f.write(xmlfile.toprettyxml(newl=‘\n‘,encoding = ‘utf-8‘)) #写入文件 if __name__ == "__main__": filepath = "C:/Users/Konmu/Desktop/Students.xls" content=GetXlsData(filepath) WriteXml(content)
- 另外两题的操作和这个基本一致,只需要改一下文件就可以了
- 注
xml
文件的写入还可以使用如下语句
f=open(‘Snew.xml‘,‘w‘) xmlfile.writexml(f,indent = ‘\t‘,newl = ‘\n‘, addindent = ‘\t‘,encoding = ‘utf-8‘) f.close()
- 效果:
样式什么的,自己手动稍微修改一下就好了,暂时没找到比较好的解决方案
相关推荐
与卿画眉共浮生 2020-10-14
xiyang 2020-08-21
baijinswpu 2020-07-29
leonranri 2020-07-26
zhongliwen 2020-07-05
麋鹿麋鹿迷了路 2020-07-05
zengyu00 2020-07-05
XGQ 2020-07-04
CoderBoy 2020-06-28
whbing 2020-06-28
绝望的乐园 2020-06-27
wellfly 2020-06-26
菇星獨行 2020-06-25
草原孤狼 2020-06-25
坚持着执着 2020-06-16
wcqwcq 2020-06-14
yuanye0 2020-06-14
zhongliwen 2020-06-13
MrFuWen 2020-06-09