python读取csv文件_用Python读取Excel文件指南

原作者丨Erik Marsja

编译者丨老齐

本文将重点阐述用Python如何读取Excel文件(xlsx),重点是演示使用openpyxl模块读取xlsx类型的文件。首先,我们要看一些简单的示例;然后,我们将学习读取多个Excel文件。

如果你阅读过《数据准备和特征工程》这本书,就肯定知道,在书中,作者介绍了如何使用Pandas读取Excel文件。在阐述本文的同时,你所看到的书中的方法,依然有效且常用。本文的目的主要是要介绍另外一种方法,并且这种方法也有它的特点。

Openpyxl简介

openpyxl模块的官方网站是:https://openpyxl.readthedocs.io/en/stable/。这里,先演示一个简单的示例,看看在Python语言中如何用openpyxl模块读取一个xlsx文件。

import openpyxl

当然,在理解上面代码之前,你应该已经知道如何读写文件了,如果这方面尚有不足,请阅读《跟老齐学Python:轻松入门》中的有关章节。

为了能够使用openpyxl模块,请先确认,在本地已经安装了Python3和这个模块。模块的安装方法非常简单,即:pip install openpyxl,如果你使用的是conda,还可以:conda install openpyxl。注意,使用pip安装的时候,如果提示你不是最新版本,应该尽快升级,用最新版本的pip来安装。

读取单个文件

前面的代码中,已经读取了单个文件,下面我们更详细地对代码进行解读。

  1. 引入模块

读取xlsx文件的第一步,就是要引入必要的模块,这里我们引入了Path和openpyxl两个模块。

import openpyxl
315add55146ccbab5c38ffb9ea6928c3.png
  1. 设置Excel文件路径

在这一步,我们用Path创建了一个实例,并且用变量xlsx_file引用,它包含了文件的路径和文件名称。

# Setting the path to the xlsx file:
459ff5c09561be2a36d0c938405bda9f.png

注意,代码中的SimData是当前工作目录的子目录,本例中的Excel文件保存在该目录中,如果保存在了其他目录中,需要设置完整的文件路径,例如:xlsx_file = Path(Path.home(), 'Documents', 'SimData', 'play_data.xlsx'),这是将Excel文件保存到了Documents目录里面的SimData子目录中了。

  1. 读入Excel文件(工作簿)

第三步,利用load_workbook()方法读取文件:

wb_obj = openpyxl.load_workbook(xlsx_file)
4faf7630b53511b2246c87205a4a47bf.png

打印输出结果说明,当前得到的是工作簿对象。

  1. 从Excel文件中读入当前工作表

一个工作簿,有多个工作表。我们能够使用的是当前的工作表,可以用下面的方式获得:

wsheet = wb_obj.active
abfe398dc1ce5cfbfbbc6824e8182ff0.png

如果知道了工作表名称,可以用这种方式得到指定工作表play_data = wb_obj['play_data']。这样就能够实现工作表的切换。

  1. 操作工作表

现在可以编辑工作表了,例如,用下面的方式获得指定单元格的值。

"C2"].value)

再如,对于已经读取到的工作表,我们能够用循环语句获得指定行,并且把各个单元格中的值打印出来。

for row 

注意,上面代码中的参数max_row,其值为6,意味着读取这个工作表的前6行。

  1. 补充:输出行和列的数量

再补充一个常用操作,就是确定Excel文件的行和列的数量。

print(sheet.max_row, sheet.max_column)
7e02e2e2821512666ccfb098aa2c3454.png

将读入的Excel文件保存为Python字典

把Excel文件的内容读入之后,怎么将它保存为字典对象?

有时候,你可能需要得到列的名称,下面代码就演示了如何实现这种需求。

import openpyxl

为了将Excel内容保存为字典对象,当然要创建一个字典,然后就是通过循环的方式,向字典中增加相应内容。

data = {}

for i, row in enumerate(sheet.iter_rows(values_only=True)):
    if i == 0:
        data[row[1]] = []
        data[row[2]] = []
        data[row[3]] = []
        data[row[4]] = []
        data[row[5]] = []
        data[row[6]] = []

    else:
        data['Subject ID'].append(row[1])
        data['First Name'].append(row[2])
        data['Day'].append(row[3])
        data['Age'].append(row[4])
        data['RT'].append(row[5])
        data['Gender'].append(row[6])

在上面的代码中,创建了一个字典data,然后循环每一行(iter_rows),并且仅仅获取该行的值。接下来使用条件语句,判断一下,如果是第一行,就增加字典的键,这其实是以键为列的名称。否则,将根据键(加Excel中的每一列)向字典中增加值。

读取多个Excel文件

下面,我们要用openpyxl模块读取多个xlsx文件。

  1. 导入模块

除了前面使用过的两个模块之外,增加了一个glob

import glob
  1. 读取目录中的所有xlsx文件

假设在子目录中有多个xlsx文件,现在我们使用glob模块,将它们都读入:

for path 
  1. 创建工作簿对象

现在已经读入了所有xlsx文件,接下来还是使用load_workbook方法创建工作簿对象,不过,这次要使用列表解析的方式循环了。

for wb 

这个列表中包含了所有xlsx文件的工作簿对象。

  1. 操纵每个文件

所有的工作簿对象都保存到了wbs引用的列表中,比如要得到第一个工作簿,可以用wbs[0],它的默认工作表名称,可以用wbs[0].sheetnames得到。其他操作跟前面就没有什么差别了。这样我们就能读入多个Excel文件了。

参考链接:https://www.marsja.se/your-guide-to-reading-excel-xlsx-files-in-python/

1d4e8a1850e2a1031c5304cc36c356ca.gif


博文视点学院好课推荐 ff6a7773298fb6bdf29112e73bf3f086.png

在很多人眼里,程序员是一个神秘的职业,编程更是深不可测的世界。对编程充满了向往和好奇,但是又苦于找不到入门的方法。本套课程就是为了这些人准备的,通过学习Python语言,打开编程世界的大门!

本课程形式为线上视频教学+纸质图书,仅需39元!

▼ 扫码立即学 ▼

54a19b0c64b72f44e8a9bdb09d8f6393.png

e9c689ce969f069b35707f0e6a9ab0ad.png 如果喜欢本文 欢迎   在看留言分享至朋友圈  三连

  热文推荐  

  • 书单丨10本“压箱底级”传世经典著作推荐!

  • 一点务实的调整,避免整个开发团队崩溃

  • Spring Boot面试核心总结,关键时刻可以救命!

  • 面对微服务的N种坑,你有通关秘籍吗?


62b09818da112357ede0c0578744090f.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值