Python -- xlrd,xlwt,xlutils 读写同一个Excel

 

最近开始学习python,想做做简单的自动化测试,需要读写excel,然后就找到了xlrd来读取Excel文件,使用xlwt来生成Excel文件(可以控制Excel中单元格的格式),需要注意的是,用xlrd读取excel是不能对其进行操作的:xlrd.open_workbook()方法返回xlrd.Book类型,是只读的,不能对其进行操作。而xlwt.Workbook()返回的xlwt.Workbook类型的save(filepath)方法可以保存excel文件。

 因此对于读取和生成Excel文件都非常容易处理,但是对于已经存在的Excel文件进行修改就比较麻烦了。不过,还有一个xlutils(依赖于xlrd和xlwt)提供复制excel文件内容和修改文件的功能。其实际也只是在xlrd.Book和xlwt.Workbook之间建立了一个管道而已.

 

一、操作Excel 常用方法

 xlrd,xlwt,xlutils一套工具,xlrd是用来读取excl的,xlwt是用来写入excel的

            xlutils,引用了xlrd和xlwt来做一些如合并,过滤,修改文件的操作,这个很多人推荐使用,但有一个缺陷,就是,他的一个

           工作表sheet只能写入65535行,多了就不能写了,解决方法可以是,每65535行新建一个工作表sheet或者向后移动几列,

          然后写入,他的列最大值为256,所以最多一个sheet文件可以写入:256 * 65535 个数据,还有就是只能读xlsx文件,不能写xlsx文件。

         对于xlsx文件的操作见  Python - openpyxl 读写操作Excel 介绍。

# -*- coding: utf-8 -*-
#导入xlwt模块
import xlwt
# 创建一个Workbook对象,这就相当于创建了一个Excel文件
book = xlwt.Workbook(encoding='utf-8', style_compression=0)
'''
Workbook类初始化时有encoding和style_compression参数
encoding:设置字符编码,一般要这样设置:w = Workbook(encoding='utf-8'),就可以在excel中输出中文了。
默认是ascii。当然要记得在文件头部添加:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
style_compression:表示是否压缩,不常用。
'''
#创建一个sheet对象,一个sheet对象对应Excel文件中的一张表格。
# 在电脑桌面右键新建一个Excel文件,其中就包含sheet1,sheet2,sheet3三张表
sheet = book.add_sheet('test', cell_overwrite_ok=True)
# 其中的test是这张表的名字,cell_overwrite_ok,表示是否可以覆盖单元格,其实是Worksheet实例化的一个参数,默认值是False
# 向表test中添加数据
sheet.write(0, 0, 'EnglishName')  # 其中的'0-行, 0-列'指定表中的单元,'EnglishName'是向该单元写入的内容
sheet.write(1, 0, 'Marcovaldo')
txt1 = '中文名字'
sheet.write(0, 1, txt1.decode('utf-8'))  # 此处需要将中文字符串解码成unicode码,否则会报错
txt2 = '马可瓦多'
sheet.write(1, 1, txt2.decode('utf-8'))# 最后,将以上操作保存到指定的Excel文件中
book.save(r'e:\test1.xls')  # 在字符串前加r,声明为raw字符串,这样就不会处理其中的转义了。否则,可能会报错

 

# -*- coding: utf-8 -*-
import xlrd
xlsfile = r"C:\Users\Administrator\Desktop\test\Account.xls"# 打开指定路径中的xls文件
book = xlrd.open_workbook(xlsfile)#得到Excel文件的book对象,实例化对象
sheet0 = book.sheet_by_index(0) # 通过sheet索引获得sheet对象
print "1、",sheet0
sheet_name = book.sheet_names()[0]# 获得指定索引的sheet表名字
print "2、",sheet_name
sheet1 = book.sheet_by_name(sheet_name)# 通过sheet名字来获取,当然如果知道sheet名字就可以直接指定
nrows = sheet0.nrows    # 获取行总数
print "3、",nrows
#循环打印每一行的内容
for i in range(nrows):print sheet1.row_values(i)
ncols = sheet0.ncols    #获取列总数
print "4、",ncols
row_data = sheet0.row_values(0)     # 获得第1行的数据列表
print row_data
col_data = sheet0.col_values(0)     # 获得第1列的数据列表
print "5、",col_data
# 通过坐标读取表格中的数据
cell_value1 = sheet0.cell_value(0, 0)
print "6、",cell_value1
cell_value2 = sheet0.cell_value(0, 1)
print "7、",cell_value2

  

二、Excel操作实例

#-*-coding:utf-8-*-
# Time:2017/9/20 20:13
# Author:YangYangJunimport xlrd,xlwt,xlutils
import os
import time
from xlutils.copy import copy'''
导入 excel操作的三个模块
xlrd  读取操作
xlwt  写入操作
xlutils 复制、剪切、粘贴等操作'''#获取当前文件路径
currntPath = os.getcwd()
print currntPath
#D:\WorkSpace\Python\Study\Selenium\PyExcel#获取excel文件路径
excelPath = os.path.join(os.getcwd(),'ExcelData')
print excelPath
#D:\WorkSpace\Python\Study\Selenium\PyExcel\ExcelData#遍历获取文件名
excelPathDir = os.listdir(excelPath)
print excelPathDir
#['PyExcel.xlsx']
#excel与程序在同一目录下,可以直接数据文件名。#excelName = 'PyExcel.xlsx'#如果不在一个目录下,最好填写绝对路径#excelName = os.path.join(excelPath,'PyExcel.xlsx')
excelName = os.path.join(excelPath,excelPathDir.pop())
print  excelName
#D:\WorkSpace\Python\Study\Selenium\PyExcel\ExcelData\PyExcel.xlsx

ReadExcel = xlrd.open_workbook(excelName)print ReadExcel.sheet_names()
# 返回的是sheet页list [u'userInfo', u'tests']

 

读取excel根据条件修改对应表格内容,并保存。

原始表格:

 

 

 

代码实例:

#-*-coding:utf-8-*-
# Time:2017/9/20 20:13
# Author:YangYangJunimport xlrd,xlwt,xlutils
import os
import time
#导入copy 方法方便文件写操作。
from xlutils.copy import copy'''
导入 excel操作的三个模块
xlrd  读取操作
xlwt  写入操作
xlutils 复制、剪切、粘贴等操作'''def OpenXlxs():xlsxPath = os.path.join(os.getcwd(),'ExcelData')xlsxPathDir = os.listdir(xlsxPath)xlsxName = os.path.join(xlsxPath,xlsxPathDir.pop())print xlsxNamereadOpenXlsx = xlrd.open_workbook(xlsxName)readXlsxSheet = readOpenXlsx.sheet_by_name('userInfo')# copy管道作用writeOpenXlsx = copy(readOpenXlsx)print readXlsxSheet,writeOpenXlsx,xlsxNamereturn readXlsxSheet,writeOpenXlsx,xlsxNamedef readXlsx(readXlsxSheet, writeOpenXlsx, xlsxName):#获取行数print "***"rowMax = readXlsxSheet.nrowsprint rowMax # 4#获取第一行的值rows = readXlsxSheet.row_values(0)print rows#获取列数colMax = readXlsxSheet.ncolsprint colMax   # 8for r in range(rowMax):if r == 0:continueelse:rows = readXlsxSheet.row_values(r)print rowsRunValue = readXlsxSheet.cell(r,6).valueif RunValue == 'Y':writeXlsx(writeOpenXlsx,r,xlsxName)def writeXlsx(writeOpenXlsx,row,xlsxName):# 前面已经通过 copy 方法获取了writeOpenXlsx# 通过get_sheet()获取的sheet有write()方法writeXlsxSheet = writeOpenXlsx.get_sheet(0)modifyTime = time.strftime('%Y-%m-%d')print modifyTimewriteXlsxSheet.write(row,4,modifyTime)writeXlsxSheet.write(row,7,'Pass')writeOpenXlsx.save(xlsxName)if __name__ == '__main__':readXlsxSheet, writeOpenXlsx, xlsxName = OpenXlxs()readXlsx(readXlsxSheet, writeOpenXlsx, xlsxName)

 

 运行代码后文件

 

 打开时报如图信息

 

此时修改一下文件后缀名即可打开,修改为xls即可。运行结果如图,根据条件修改了相应行的值。

 

 

另外一种处理办法就是用openpyxl 库操作xlsx格式文件。

  参考:Python - openpyxl 读写操作Excel

转载于:https://www.cnblogs.com/BlueSkyyj/p/7570223.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/391308.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机工程师分级_这些是每个计算机工程师都应该知道的数字

计算机工程师分级In 2010, Jeff Dean from Google gave a wonderful talk at Stanford that made him quite famous. In it, he discussed a few numbers that are relevant to computing systems. Then Peter Norvig published those numbers for the first time on the inter…

leetcode 377. 组合总和 Ⅳ(dp)

给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。 题目数据保证答案符合 32 位整数范围。 示例 1: 输入:nums [1,2,3], target 4 输出:7 解释&…

1.4- 定时任务总结之九句箴言

1.4定时任务之九句箴言九句箴言---- 不会九句箴言别做运维1.定时任务规则之前加注释2.使用脚本代替命令行制定定时任务3.定时任务中date命令%的特殊含义定时任务中,%表示回车 -----可以使用\转义4.运行脚本一定要用/bin/sh或sh脚本不必须有x权限5.定时任务中-命令或脚本的输出…

ubuntu 18.04 vi里面方向键变成abcd 处理办法

sudo apt-get remove vim-common sudo apt-get install vim 转载于:https://www.cnblogs.com/testing-BH/p/11506400.html

知识力量_网络分析的力量

知识力量The most common way to store data is in what we call relational form. Most systems get analyzed as collections of independent data points. It looks something like this:存储数据的最常见方式是我们所谓的关系形式。 大多数系统作为独立数据点的集合进行分析…

python里的apply,applymap和map的区别

apply,applymap和map的应用总结:apply 用在dataframe上,用于对row或者column进行计算;applymap 用于dataframe上,是元素级别的操作;map (其实是python自带的)用于series上,是元素级别的操作。如…

验证曲线和学习曲线_如何击败技术学习曲线的怪物

验证曲线和学习曲线Doing what I do for a living, which these days mostly involves creating technology books and courseware, I’m constantly learning new technologies. In a way, my new tech adventures are not much different than the ones most IT pros face, e…

234

234 转载于:https://www.cnblogs.com/Forever77/p/11509588.html

SCCM PXE客户端无法加载DP(分发点)映像

上一篇文章我们讲到了一个比较典型的PXE客户端无法找到操作系统映像的故障,今天再和大家一起分享一个关于 PXE客户端无法加载分发点映像的问题。具体的报错截图如下:从报错中我们可以看到,PXE客户端已经成功的找到了SCCM服务器,并…

Docker 入门(2)技术实现和核心组成

1. Docker 的技术实现 Docker 的实现,主要归结于三大技术: 命名空间 ( Namespaces )控制组 ( Control Groups )联合文件系统 ( Union File System ) 1.1 Namespace 命名空间可以有效地帮助Docker分离进程树、网络接口、挂载点以及进程间通信等资源。L…

marlin 三角洲_带火花的三角洲湖:什么和为什么?

marlin 三角洲Let me start by introducing two problems that I have dealt time and again with my experience with Apache Spark:首先,我介绍一下我在Apache Spark上的经历反复解决的两个问题: Data “overwrite” on the same path causing data l…

环境变量的作用

1. PATH环境变量。作用是指定命令搜索路径,在shell下面执行命令时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。我们需要把 jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件如javac/ja…

WeWork通过向225,000个社区征税来拼命地从Meetup.com榨取现金

Update: A few hours after I published this article, Meetup quietly added a note to the top of their announcement. They have not tweeted or done anything else to publicize this note, but some people noticed it and shared it with me.更新:在我发布本…

eda分析_EDA理论指南

eda分析Most data analysis problems start with understanding the data. It is the most crucial and complicated step. This step also affects the further decisions that we make in a predictive modeling problem, one of which is what algorithm we are going to ch…

leetcode 897. 递增顺序搜索树(中序遍历)

给你一棵二叉搜索树,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。 示例 1: 输入:root [5,3,6,2,4,null,8,1,null…

【一针见血】 JavaScript this

JavaScript this 指向一站式解决转载于:https://www.cnblogs.com/xueyejinghong/p/8403987.html

基于ssm框架和freemarker的商品销售系统

项目说明 1、项目文件结构 2、项目主要接口及其实现 (1)Index: 首页页面:展示商品功能,可登录或查看商品详细信息 (2)登录:/ApiLogin 3、dao层 数据持久化层,把商品和用户…

c++飞扬的小鸟游戏_通过建立一个飞扬的鸟游戏来学习从头开始

c飞扬的小鸟游戏Learn how to use Scratch 3.0 by building a flappy bird game in this course developed by Warfame. Scratch is a free programming language and online community where you can create your own interactive stories, games, and animations. Scratch is…

345

345 转载于:https://www.cnblogs.com/Forever77/p/11512701.html

简·雅各布斯指数第二部分:测试

In Part I, I took you through the data gathering and compilation required to rank Census tracts by the four features identified by Jane Jacobs as the foundation of a great neighborhood:在第一部分中 ,我带您完成了根据简雅各布斯(Jacobs Jacobs)所确定…