如何使用Python读取Excel文件?

6回答·1.2万阅读
matplotlib小讲堂

2017年10月24日

其实,在此之前,小编也从来没研究过如何使用Python读取Excel数据,但是本着负责的态度,小编搜索了一下“Python如何读取Excel数据”,得知xlrd库是专门用来读取Excel的,所以小编马上下载下来学习了一番。

中国有句古话说“授人以鱼,不如授人以渔”,所以今天小编不打算直接分享干货,而是通过这个库教大家如何学习使用一个陌生的库。

一、库的安装

通过百度我们得知,已经有现成的处理Excel数据的xlrd库了,所以我们可以直接在终端里输入以下命令下载安装最新的xlrd库。

pip install xlrd

二、查看库文件

Python的第三方库均保存在Python安装目录下的lib文件夹中的site-packages文件夹中,所以我们直接进入该文件夹找到并进入xlrd文件夹。

从图中我们可以看出,xlrd库中文件并不是很多,但是我们应该从哪个文件开始看呢?有一定编程基础的人应该发现__init__.py这个文件了,init在英语中是开始、最初的意思,而Linux系统也是从init这个进程对组成Linux的服务和应用程序进行初始化的,所以一个成熟的库通常都会有一个__init__.py文件,而这个库的运行就是从这个文件开始的。

三、__init__.py代码阅读

打开文件,我们可以看出,该文件主要分为两部分:第一部分导入依赖的库以及xlrd库中的其他文件;第二部分为定义的三个函数。

对于导入的库和文件,我们可以先不看,我们主要看定义的三个函数,看他们的说明以及返回什么。

1、open_workbook

函数open_workbook的说明为:“Open a spreadsheet file for data extraction.”

翻译成中文的意思为:“打开一个用于提取数据的电子表格。”

由此我们可知,使用这个库的第一步应该是从这个函数开始的,即通过该函数打开我们所要处理的Excel文件。

而该函数返回值为bk,即book.open_workbook_xls()的返回值,所以我们下一步的任务就是查看book.py这个文件。

2、dump

函数dump的说明为:“For debugging: dump an XLS file's BIFF records in char & hex.”

翻译成中文的意思为:“用于调试:将XLS文件的BIFF记录转储为16进制字符”

看说明我也没弄明白具体是做什么的,所以暂时放过,不研究。

3、count_records

函数count_records的说明为:“For debugging and analysis: summarise the file's BIFF records.”

翻译成中文的意思为:“用于调试和分析:总结文件的BIFF记录。”

看说明同样不明白具体是做什么的,所以暂时放过,不研究。

四、book.py代码阅读

book.py有两个类五个函数,由于__init__.py文件中open_workbook函数最后的返回是book.open_workbook_xls(),所以我们先从open_workbook_xls()这个函数读起。

1、open_workbook_xls()

对于函数,我们还是先不管他内部都做了什么,先看返回值是什么。很显然,open_workbook_xls()函数返回值为bk,即Book(),由此我们得知,当我们使用open_workbook函数导入一个Excel文件时,返回的是一个Book类的实例,而我们下一步的任务就是看Book类。

2、Book()

Book()类有30多个方法,我们依旧从__init__()方法开始看。

展开__init__()方法,发现里面只有属性变量的初始化,并没有太多有用的东西。此时我们的线索断了,我们应该怎么办呢?我们不妨跳出这个库,想想Excel表格的结构是什么样的。

用过Excel的同学一定都知道,在Excel中,通常一个文件为一个工作簿,即Book;而一个工作簿可以有多个工作表,即Sheet。

我们回过头来继续看代码发现,Book类中有一个sheets方法,所以我们就从这个sheets方法入手。

sheets方法调用了get_sheet方法,返回_sheet_list列表,我们继续看get_sheet方法

从get_sheet方法中我们可以得知_sheet_list列表的元素为sh,方法的返回值也为sh,即sheet.Sheet()——工作表。

至此,我们已经掌握以下三点内容:

  1. 使用open_workbook函数导入Excel文件,得到Book工作簿实例

  2. 通过Book工作簿的sheets方法我们可以获取Book工作簿的所有sheet工作表列表

  3. 通过Book工作簿的get_sheet方法我们可以获取Book工作簿的指定的某个sheet工作表

由于数据都是存储在工作表中的,所以我们只要继续研究sheet.py文件就可以弄明白如何将数据提取出来了。

五、sheet.py代码阅读

sheet.py文件中Sheet类是我们研究的重点,所以我们首先看这个类。

还是一样的流程,先看__init__()方法,里面同样是一些属性变量初始化定义。

然后我们会发现几个带values字样的方法:

1、cell_value

根据说明我们可以知道,该方法可以得到指定单元格的数值。

2、row_values

根据说明我们可以知道,该方法可以得到指定行的数值。

3、col_values

根据说明我们可以知道,该方法可以得到指定列的数值。

六、总结

使用xlrd库读取Excel文件有以下几个步骤:

1、使用open_workbook函数导入Excel文件,得到Book工作簿实例

book = xlrd.open_workbook('./test.xls')

2、通过Book工作簿的sheets或get_sheet方法获取Book工作簿的sheet工作表

sheet = book.sheets()[0]

3、通过sheet工作表的cell_value、row_values或col_values方法获取相关数值

row_values = sheet.row_values(1)

今天我们通过对xlrd库的解读跟大家分享了如何使用Python读取Excel文件,并教给大家如何学习使用一个陌生的库。由于篇幅有限,xlrd库的大部分用法文中并没有讲到,不过,既然大家已经知道如何学习一个陌生的库了,xlrd库的用法就由大家自己来摸索吧!

如果您觉得小编还有一点点小能力,想学习更多的Python或者数据可视化的东西,关注我吧!

木子146946827

2017年10月24日

一张图搞定,xlrd印象得额外安装,pip install一下就OK了

日月星

2017年10月25日

一、安装xlrd模块

到python官网下载
http://pypi.python.org/pypi/xlrd

二、使用介绍

2.1 导入模块

[python] view plain copy

import xlrd

2.2 打开Excel文件读取数据

[python] view plain copy

data = xlrd.open_workbook("excelFile.xls")

2.3 使用技巧

获取一个工作表

[python] view plain copy

table = data.sheets()[0] #通过索引顺序获取

table = data.sheet_by_index(0) #通过索引顺序获取

table = data.sheet_by_name(u'Sheet') #通过名称获取

获取整行和整列的值(数组)

[python] view plain copy

table.row_values(i)

table.col_values(i)

获取行数和列数

[python] view plain copy

nrows = table.nrows

ncols = table.ncols

循环行列表数据

[python] view plain copy

for i in range(nrows):

print table.row_values(i)

单元格

[python] view plain copy

cell_A1 = table.cell(0,0).value

cell_C4 = table.cell(2,3).value

使用行列索引

[python] view plain copy

cell_A1 = table.row(0)[0].value

cell_A2 = table.col(1)[0].value

简单的写入

row = 0

col = 0

#类型 0 empty, 1 string, 2 number, 3 date, 4 boolean, 5 error

ctype =1

value = '单元格的值'

[python] view plain copy

table.put_cell(row,col,ctype,value,xf)

例子1 通过索引索取值

[python] view plain copy

# -*- coding: utf-8 -*-

import xdrlib,sys

import xlrd

def open_excel(file='file.xls'):

try:

data = xlrd.open_workbook(file)

return data

except Exception,e:

print str(e)

#根据索引获取Excel表格中的数据

#参数:file: Excel文件路径

# colnameindex: 表头列名所在行的索引

# by_index: 表的索引

def excel_table_byindex(file='file.xls',colnameindex=0,by_index=0):

data = open_excel(file)

table = data.sheets()[by_index]

nrows = table.nrows #行数

ncols = table.ncols #列数

colnames = table.row_values(colnameindex) #某一行数据

list = []

for rownum in range(1,nrows):

row = table.row_values(rownum)#以列表格式输出

if row:

app = {}

for i in range(len(colnames)):

app[colnames[i]] = row[i]

list.append(app)#向列表中插入字典类型的数据

return list

def main():

tables = excel_table_byindex(file='test.xls')

for row in tables:

print row

if __name__=="__main__":

main()

运行结果为:

例子2 通过名字索引

[python] view plain copy

# -*- coding: utf-8 -*-

import xdrlib,sys

import xlrd

def open_excel(file='file.xls'):

try:

data = xlrd.open_workbook(file)

return data

except Exception,e:

print str(e)

def excel_table_byname(file='file.xls',colnameindex=0,by_name=u'Sheet1'):

data = open_excel(file)

table = data.sheet_by_name(by_name)

nrows = table.nrows #行数

colnames = table.row_values(colnameindex) #某一行数据

list = []

for rownum in range(1,nrows):

row = table.row_values(rownum)

if row:

app = {}

for i in range(len(colnames)):

app[colnames[i]] = row[i]

list.append(app)

return list

def main():

tables = excel_table_byname(file='test.xls')

for row in tables:

print row

if __name__=="__main__":

main()

例子3 通过xlwt写文件

[python] view plain copy

# -*- coding: utf-8 -*-

import xdrlib,sys

import xlwt

#新建一个excel文件

file = xlwt.Workbook()

#新建一个sheet

table = file.add_sheet('info',cell_overwrite_ok=True)

#写入数据table.write(行,列,value)

table.write(0,0,'wangpeng')

#保存文件

file.save('file.xls')

得到的结果为

我是爱学习的

2020年05月23日

用pandas库,非常方便。

没有更多内容了