Python 每日一练

Posted Konmu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 每日一练相关的知识,希望对你有一定的参考价值。

引言

  • 今天的练习可以说是昨天的那个的反操作,今天要尝试将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
    样式什么的,自己手动稍微修改一下就好了,暂时没找到比较好的解决方案

以上是关于Python 每日一练的主要内容,如果未能解决你的问题,请参考以下文章

Python每日一练——第5天:闰年问题升级版

python每日一练:0015题

4.3 每日一练

Python每日一练——第3天:三种猜数字小游戏

python每日一练:0011题

Python每日一练——第4天:百钱百鸡问题(升级版)