社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

最全整理!Python 操作 Excel 库 xlrd与xlwt 常用操作详解!

Python绿色通道 • 5 年前 • 360 次点击  

↑ 关注 + 星标 ,每天学Python新技能

后台回复【大礼包 】送你Python自学大礼包

在之前的Python办公自动化系列文章中,我们已经相信介绍了openyxlxlsxwriter等Python操作Excel库。

相信大家对于几个库的差异与使用场景有了一定的认识,本文将继续介绍另外两种操作Excel的Python库---xlrdxlwt。看看这两者搭配起来如何玩出火花!

和以前文章一样,有请老朋友openpyxl登场来进行对比

  • openyxl:可以对xlsx、xlsm文件进行读、写操作,主要对Excel2007年之后的版本(.xlsx)
  • xlrd:可以对xlsx、xls、xlsm文件进行读操作且效率高
  • xlwt:主要对xls文件进行写操作且效率高,但是不能执行xlsx文件

通过对比,可以看到在效率上而言,xlrd&xlwtopenyxl要高效得多。而写入数据方面上而言,openyxl又比较贴近我们的日常所需,所以两种方式来处理Excel各有千秋。

一、简介

xlrd是用来从Excel中读写数据的,但我们通常只用它进行读操作,写操作会相对于专门写入的模块麻烦一些。其实,后面的rd可以看出是reader的缩小。

类比于xlrd的reader,那么xlwt就相对于writer,而且很纯正的一点就是它只能对Excel进行写操作。xlwt和xlrd不光名字像,连很多函数和操作格式也是完全相同。下面让我们慢慢介绍。

二、安装与使用

安装很简单,直接在命令行或者终端中使用pip安装

pip install Xlrd
pip install xlwt

而使用xlrd&xlwt操作Excel的大致过程如下图所示

三、xlrd常用操作详解

现在我们讲解xlrd操作Excel部分常用操作,先准备一份Excel文件,大致如下图:

用xlrd进行读取比较方便,流程和平常手动操作Excel一样,打开工作簿(Workbook),选择工作表(sheets),然后操作单元格(cell)。接下来先介绍一下基本操作在举个例子。

3.1 打开Excel文件

import xlrd
df = xlrd.open_workbook(name) 

先导入模块而后使用open_workbook()函数来读取指定的一个工作簿对象。这里的参数name是Excel文件的名字,一般使用的是相对路径的名字,结果如下

3.2 查看工作簿中所有sheet

df.sheet_names()

我们读取上述文件,便可以得到以列表形式嵌字符串的值。

3.3 选择某一个工作表

先看代码

table=df.sheets()[0]  #列表是从0开始计数
table=df.sheet_by_index(0)
table=df.sheet_by_name('name')

第一行代码是获取第一个工作表的意思,写法是根据内置的列表格式来选取的。

第二行代码顾名思义是通过索引获取第一个工作表,这里的索引与pandasDataFrameindex索引类似,只不过对象换成了工作表。

第三行代码是通过表的名称选择工作表,如果工作表是有自己的名字的,那么这个读取方式是最方便的。

打印table,可以得到类似下图的结果

3.4 获取表格的行数和列数

注意,这里不需要在函数后面加小括号,否则你可能debug时都头痛于错在哪。

row=table.nrows
col=table.ncols

打印row和col,可以发现是和我们的原表格一样的行列数。

3.5 获取整行和整列的值

这里需要注意两个参数:num1和num2

table.row_values(num1)
table.column_values(num2)

num1在row_values()中,指的是选取的行数是多少,例如我们选取第一行所有字段名称数据,那么这个num1就是0。

同理,column_values()的参数就是第几列的意思。

它出来的值是一个列表的形式。调用第一行代码,可以得到如下结果。

3.6 通过循环读取表格的所有行

在第五步我们实现了读取单行单列的数据,那么我们就用循环来将所有行打印出来。

for i in range(table.nrows):
 print (table.row_values(i))

效果如下

3.7 获取单元格的值

代码很简单,有点像VBA

cell1=table.row(0)[0].value
cell1=table.cell(0,0).value
cell1=table.col(0)[0].value

第一行获取单元格值的方式是通过调取指定行数据进行筛选。

第二行是以二维的形式获取,即(第i行,第j列)形式。

第三行与第一行类似是通过列索引调用。

3.8 例子

最后来举一个完整的例子

df=xlrd.open_workbook('data.xlsx')  
table=df.sheet_by_name('早起Python')
data_list=[] 
data_list.append(table.row_values(1))
for i in data_list:
    print(i)

打出来的结果这里我们的目的是选取上述讲解过的语法,将第三行所有数据放到data_list列表中并用for循环将它打印出来。

四、xlwt常用操作详解

4.1 新建一个Excel文件

直接使用.Workbook()即可

import xlwt
df2 = xlwt.Workbook()

4.2 新建一个工作表

这里的name是工作表的名称

table2=df2.add_sheet('name')

4.3 写入数据到指定单元格

这里有三个参数,前两个参数对应(第i行,第j列),代表的是单元格的位置。第三个参数是要写的值(可以是字符串、数字)

table2.write(0,0,'Python')

需要注意的是,如果是对同一个单元格重复操作,会让Python报错(多次输入错误),所以如果想要取消这个功能,则添加这个参数在新建工作表的代码里面。

table2=df2.add_sheet('name',cell_overwrite_ok=True)

4.4 保存文件

上面提示过,xlwt仅支持.xls的文件格式输出,常用的xlsx是不行的。这也是这个模块的一种缺陷。

df2.save('data2.xls')

4.5 改变样式

调整样式也是可以的,先看几行代码

style=xlwt.XFStyle()

font=xlwt.Font()

font.name='name Times New Roman'

font.bold=True

style.font=font

sheet.write(0,1,'Python',style)

第一行代码是初始化样式,可以认为是一个类似于父类的东西。

第二行代码是为样式创建字体

第三行代码是指定字体的名字,这里用到的是name Times New Roman这个类型。

第四行代码是字体加粗,以布尔值的形式的设定。

第五行代码是将font设定为style的字体

第六行代码是写入文件单元格时怎么运用这个格式。

4.6 例子:

最后,我们结合两个模块进行读写操作。

我们的目标是将已经准备好的data文件进行读取,并将其内容进行倒序排序,最终以转置形式输出。先思考一下如何使用代码实现👇

对于xlwt写入部分,先创建一个早起Python的工作表。并将提取的数据列表data_list1用列表的倒叙来排序。最后用pop()函数把两个字段名称(grammerpopularity)放在首位。最后结合我们写入部分讲解的内容进行保存。

xlrd读取部分我们稍有不同的是,我们的for循环用在了提取所有数据这一步骤,而不再是循环输出列表值。

所以完整代码如下

import xlrd
df=xlrd.open_workbook('data.xlsx')  
table=df.sheet_by_name('早起Python')
data_list=[] 
for i in range(table.nrows):
    data_list.append(table.row_values(i))
data_list1 = []
data_list1 = data_list[::-1]
item = data_list1.pop(-1)
data_list1.insert(0,item)
import xlwt
df2 = xlwt.Workbook()
table2=df2.add_sheet('早起Python')
for i in range(2):
    for j in range(9):
        table2.write(i,j,data_list1[j][i])
df2.save('data2.xls')

至此我们就将xlrdxlwt的常用操作都盘点了一遍,如果想要了解的透彻一点的话,早起还是建议按照文中介绍的顺序自己动手敲一遍代码来体会

最后也希望大家能够体会不同库之间的异同与使用场景,当然Python操作Excel的库并不止这五个(openpyxlxlswriterxlwingsxlrdxlwt),我会在全部介绍一遍后为大家送上总结!

万水千山总是情,点个  👍  行不行。


Python自学超级硬核资料


最后送大家一份Python学习大礼包,从Python基础,爬虫,数据分析Web开发等全套资料,吃透资料,你可以扔掉其他资料,这些资料都是视频,学起来非常友好 


Ps:都是视频学习资料,非常 适合基础不好或者零基础的同学


推荐阅读

  1. 为什么美国学生学的数学比我们简单,却能做出很牛逼的东西?

  2. 一位大厂数据分析师的工作日常

  3. 永别了,91网站!宣布永久关闭

  4. 50K,14薪,华为后端开发挣钱有多野?


看完记得关注@Python绿色通道
及时收看更多好文
↓↓↓



点个在看你最好看

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/114671