zoukankan      html  css  js  c++  java
  • Python 每日一练(6)

    引言

    • 今天的练习可以说是昨天的那个的反操作,今天要尝试将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='
    ',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='
    ',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 = '	',newl = '
    ', addindent = '	',encoding = 'utf-8')
        f.close()
    
    • 效果:
      Python
      样式什么的,自己手动稍微修改一下就好了,暂时没找到比较好的解决方案
  • 相关阅读:
    【Android开发学习笔记】【高级】【随笔】插件化——初探
    【Android测试】【第十三节】Uiautomator——如何组织好你的测试代码(项目实战)
    【Android测试】【第十二节】Uiautomator——API详解
    【Android测试】【第十一节】Uiautomator——简介
    【Android测试】【第十节】MonkeyRunner—— 录制回放
    【Android测试】【第九节】MonkeyRunner—— 初识
    poj 1475 推箱子
    leetcode Ch3-DFS & Backtracking I
    Windows Socket和Linux Socket编程的区别 ZZ
    Linux网络编程入门 (转载)
  • 原文地址:https://www.cnblogs.com/Konmu/p/12576373.html
Copyright © 2011-2022 走看看