引言

  • 今天的练习可以说是昨天的那个的反操作,今天要尝试将xls文件的内容写入xml文件中
  • 所涉及到的库有xml,xlrd

xls文件内容写入xml

  • python操作excel主要用到xlrdxlwt这两个库,即xlrd是读excelxlwt是写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()
  • 效果:



    样式什么的,自己手动稍微修改一下就好了,暂时没找到比较好的解决方案

Python 每日一练(6)的更多相关文章

  1. python每日一练:0007题

    第 0007 题: 有个目录,里面是你自己写过的程序,统计一下你写过多少行代码.包括空行和注释,但是要分别列出来. # -*- coding:utf-8 -*- import os def count ...

  2. [python每日一练]--0012:敏感词过滤 type2

    题目链接:https://github.com/Show-Me-the-Code/show-me-the-code代码github链接:https://github.com/wjsaya/python ...

  3. Python 每日一练 | Flask 实现半成品留言板

    留言板Flask实现 引言 看了几天网上的代码,终于写出来一个半成品的Flask的留言板项目,为什么说是半成品呢?因为没能实现留言板那种及时评论刷新的效果,可能还是在重定向上有问题 或者渲染写的存在问 ...

  4. Python 每日一练(5)

    引言 Python每日一练又开始啦,今天的专题和Excel有关,主要是实现将txt文本中数据写入到Excel中,说来也巧,今天刚好学校要更新各团支部的人员信息,就借此直接把事情做了 主要对于三种数据类 ...

  5. Python 每日一练(4)

    引言 今天继续是python每日一练的几个专题,主要涵盖简单的敏感词识别以及图片爬虫 敏感词识别 这个敏感词的识别写的感觉比较简单,总的概括之后感觉功能可以简略成if filter_words in ...

  6. Python 每日一练(3)

    引言 今天的每日一练,学习了一下用Python生成四位的图像验证码,就是我们常常在登录时见到的那种(#`O′) 思路分析 正如常见的那种图像验证码,它是由数字和字母的随机组合产生的,所以我们首先的第一 ...

  7. Python每日一练(1)

    这两天在做Python的每日一练,感觉收获颇丰,所以来记录分享一下,一共做了三个,涉及socket,PIL,pymysql三个库,另外终于开始了Flask框架的学习,后续也会做出一些分析 第一个是一个 ...

  8. Python 每日一练(2)

    引言 我又双叒叕的来啦,新博客的第二篇文章,这次是继之前公众号上每日一练的第二个,这次是专题实对于文件的一些处理的练习 主要有以下几类: 1.实现英文文章字频统计 2.统一剪裁某一指定目录下的所有图片 ...

  9. Python每日一练(1):计算文件夹内各个文章中出现次数最多的单词

    #coding:utf-8 import os,re path = 'test' files = os.listdir(path) def count_word(words): dic = {} ma ...

  10. Python 每日一练(7)

    引言 今天的练习比较轻松,原本是有两题的,但是第一题那个大致看了一下,其实和之前的6个练习差不多,就是把xls中的文件数据读取出来后,进行一下处理,对于那题而言就是一个求和操作,所以就没练了,所以今天 ...

随机推荐

  1. FileStream提示文件正在由另一进程使用的解决方法

    文件正在由另一进程使用…… FileStream fs = new FileStream(strFilePath, FileMode.Open,FileAccess.Read,FileShare.Re ...

  2. Flutter 1.17版本重磅发布

    Flutter 1.17 是2020年的第一个稳定版本,此版本包括iOS平台Metal支持(性能更快),新的Material组件,新的Network跟踪工具等等! 对所有人来说,今年是充满挑战的一年. ...

  3. JS 究竟是先有鸡还是有蛋,Object与Function究竟谁出现的更早,Function算不算Function的实例等问题杂谈

    壹 ❀ 引 我在JS 疫情宅在家,学习不能停,七千字长文助你彻底弄懂原型与原型链一文中介绍了JavaScript原型与原型链,以及衍生的__proto__.constructor等一系列属性.在解答了 ...

  4. 【认证与授权】Spring Security自定义页面

    在前面的篇幅中,我们对认证和授权流程大致梳理了一遍.在这个过程中我们一直都是使用系统生成的默认页面,登录成功后也是直接调转到根路径页面.而在实际的开发过程中,我们是需要自定义登录页面的,有时还会添加各 ...

  5. CC2530ADC应用

    ADC单通道外部电压采集 需要设置一个上机位命令控制字符. 系统时钟初始化——32MHZ晶振 串口0函数初始化——设置串口对应引脚,波特率,清楚中断标志 串口0接收中断响应函数——U0DBUF将控制命 ...

  6. ubuntu18.04下mysql安装时没有出现密码提示

    前言: 一:配置 ubuntu 18.04 mysql 5.7.30 二:问题 ubuntu18.04下mysql安装时没有出现密码提示,安装后自己有一个默认的用户名以及密码 解决方案: 1. 在终端 ...

  7. JS字符串截取 “指定字符” 前面和后面的内容!

    JS字符串截取 “指定字符” 前面和后面的内容! var string= "07/12" var before = string.split('/')[0] var after = ...

  8. 自动扫雷 python

    自动扫雷一般分为两种,一种是读取内存数据,而另一种是通过分析图片获得数据,并通过模拟鼠标操作,这里我用的是第二种方式. // 2018.8.10更新 代码已上传至GitHub https://gith ...

  9. java-> 利用IO操作与递归实现目录的复制

    public class CopyDir { public static void main(String[] args) { copyDir(new File("d:\\a"), ...

  10. 如何在Github快速找到资源(资源快速检索)

    github 资源检索 Github上的资源如漫天星辰,如果没有技巧,盲目的瞎找,想找到自己想要学习的的知识和资源如大海捞针!!!! 掌握正确的方法,可以说是"妈妈再也不用担心,你找不到代码 ...