前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用Python玩转Excel | 操作大型Excel文件

用Python玩转Excel | 操作大型Excel文件

作者头像
TalkPython
发布2021-09-16 17:18:46
1.8K0
发布2021-09-16 17:18:46
举报
文章被收录于专栏:TalkPythonTalkPython

有时候我们需要处理大型Excel文件,打开时容易出现卡顿、闪退的情况。程序也不例外,如果让程序直接读取大型工作簿中的数据,读取程序本身的运行也会变得缓慢、“卡顿”。

这次我们介绍一种新的操作Excel文件的第三方库,并通过它来处理大型文件。它完全可以取代xlrd、xlwt进行Excel文件的读写操作。

openpyxl相较于xlrd、xlwt,有更丰富的功能,通过openpyxl可以对工作簿进行读写及修改操作。此外,openpyxl同时支持*.xls与*.xlsx格式的工作簿,不用再考虑格式问题。openpyxl唯一的劣势就是对Excel中的VBA(Visual Basic forApplications)支持并不友好,但掌握了Python操作Excel的知识,你将不再需要使用VBA。

当要处理大型Excel文件时,直接将整个文件数据载入程序的操作是不合理的,数据量过大会占用过多内存,从而影响程序本身的运行速度,导致程序出现“卡顿”、闪退等情况。

为了读取大型Excel文件中的数据或将大量数据写入文件,需要使用openpyxl的read_only模式与write_only模式。

在read_only模式下,openpyxl可以使用恒定的内存来处理无限的数据,其原理就是先处理一部分数据,处理完后,释放占用的内存,然后继续读入部分数据进行处理。这种方式可以快速读取大型Excel文件中的数据。但需要注意,在该模式下,不允许对工作表进行写操作。

在write_only模式下,openpyxl也是通过类似的原理将大量数据分批写入Excel文件中的。不同之处在于,该模式下不允许对工作表进行读操作。

下面通过两段程序,具体说明如何使用openpyxl完成大数据文件的读取与写入:

读取实例程序:

代码语言:javascript
复制
import openpyxl import load_workbook

# read_only模式下读取大数据文件
big_excel_file = load_workbook(filename='file.xlsx',read_only=True)
sheet = big_excel_file['sheet_name']

# 遍历表格中的行数据
fow now in sheet.rows:
  # 遍历每行中的每一列
  for cell in row:
    print(cell.value)

写入实例程序:

代码语言:javascript
复制
from openpyxl import Workbook
from openpyxl.cell import WriteOnlyCell
from openpyxl.comments import Comment
from openpyxl.styles import Font

# 设置write_only为True
wb = Workbook(write_only=True)
sheet = wb.create_sheet()
# 创建一个sheet
cell = WriteOnlyCell(sheet,value='write_only')
cell.font = Font(name="微软雅黑",size=24)
# 添加数据
sheet.append([cell,'talkpython',None])
# 保存文件
wb.save('talkpython.xlsx')

在write_only模式下,创建单元格需要使用WriteOnlyCell方法,使用该方法创建的单元格依旧可以设置相应的样式。此外,在write_only模式下,不可在任意位置使用cell或iter_rows方法,在添加数据时只能使用append方法。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 TalkPython 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档