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=‘\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()
  • 效果:

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

原文地址:https://www.cnblogs.com/Konmu/p/12576373.html

时间: 2024-11-08 22:37:12

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

Python 每日一练(3)

引言 今天的每日一练,学习了一下用Python生成四位的图像验证码,就是我们常常在登录时见到的那种(#`O′) 思路分析 正如常见的那种图像验证码,它是由数字和字母的随机组合产生的,所以我们首先的第一步就是生成这样的数字字母组合 完成第一步后,剩下的就和之前第一次练习给图片加文字一样的操作了 具体实现 生成随机验证码 def genUnit(): ascii_and_num=string.ascii_uppercase+string.digits Verification_Code=random

python每日一练之20170611

#!/usr/local/bin/python #-*- coding: UTF-8 -*- #端口扫描器 import socket import thread import time socket.setdefaulttimeout(3)  #设置了全局默认超时时间 def socket_port(ip,PORT):  #扫描开放端口     try:         if PORT>=65535:             print u"端口扫描结束0-65535"    

Python每日一练(2):找出html中的所有链接(Xpath、正则两个版本)

要在hrml文件中找出特定的内容,首先需要观察该内容是什么东西,在什么位置,这样才能找出来. 假设html的文件名称是:"1.html".href属性全都在a标签里. 正则版: #coding:utf-8 import re with open('1.html','r') as f: data = f.read() result = re.findall(r'href="(.*?)"',data) for each in result: print each Xpa

python每日一练:0004题

第 0004 题: 任一个英文的纯文本文件,统计其中的单词出现的个数. import re count = 0 with open('./EnglishText.txt','r') as f: temp = f.readlines() for i in temp: regList = re.findall('[a-zA-Z0-9]+',i) #找出每一行中的单词数 count += len(regList) print("文本EnglishText.txt中单词的个数为:{0}".fo

python每日一练:0015题

第 0015 题: 纯文本文件 city.txt为城市信息, 里面的内容(包括花括号)如下所示: { "1" : "上海", "2" : "北京", "3" : "成都" } 请将上述内容写到 city.xls 文件中,如下图所示: 代码如下: import xlwt import re workbook = xlwt.Workbook() worksheet = workbook.ad

python每日一练:0011题

第 0011 题: 敏感词文本文件 filtered_words.txt,里面的内容为以下内容,当用户输入敏感词语时,则打印出 Freedom,否则打印出 Human Rights. 北京 程序员 公务员 领导 牛比 牛逼 你娘 你妈 love sex jiangge 示例代码: inputs = input('请输入内容:') with open('filtered_words.txt','r',encoding='utf-8') as f: while True: word = f.read

CSS3每日一练之内容处理-嵌套编号

出处:http://www.w3cfuns.com/thread-5592229-1-17.html 1.大标题一   1.子标题   2.子标题   3.子标题2.大标题二   1.子标题   2.子标题3.大标题三   1.子标题   2.子标题   3.子标题 这种问题,你可能会觉得直接定义两个计数器,分别编号不就行了,于是就写出了如下代码: <!DOCTYPE HTML> <html> <head> <meta charset="gb2312&q

每日一小练——最长平台问题

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:最长平台问题 内容:一直一个已经从小到大排序的数组,这个数组中的一个平台就是连续的一串同样的元素.而且这个元素不能再延伸. 比如,在1,2,2,3,3,3,4,5,5,6中1,2,2,3,3,3,4,5,5,6都是平台.试编写一个程序,接受一个数组,把这个数组中最长的平台找出来.在这个样例中, 3,3,3就是该数组的中的最长的平台. 说明: 这个程序十分简单,可是编写好却不easy,因此在编敲代码时应注意考虑以下几点:

每日一小练——列出全部子集

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:列出全部子集 内容:写一个程序,列出{1,2,3,4,...,n}这个集合的全部子集,包含空集{ }. 解决问题的算法应该有非常多种,只是我发现了一种非常easy也非常好玩的方法,就是用二进制表示几何元素的方法 比方假设n是3,则子集有(不包含空集){1}{2}{3}{1,2}{1,3}{2,3}{1,2,3}就是1*{0,1}and2*{0,1}and3{0,1}每一个组合出现一次,所以也能够看成是{0,0,1}{0