Python-使用openpyxl读取excel内容

这篇具有很好参考价值的文章主要介绍了Python-使用openpyxl读取excel内容。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 本篇文章目标

将下面的excel中的寄存器表单读入并构建一个字典
Python-使用openpyxl读取excel内容

2. openpyxl的各种基本使用方法

2.1 打开工作簿

wb = openpyxl.load_workbook('test_workbook.xlsx')

2.2 获取工作簿中工作表名字并得到工作表

ws = wb[wb.sheetnames[0]]

wb.sheetnames 会返回一个列表,列表中是每个工作表的名称,数据类型为str。执行上述代码后ws就是获取的工作表。

2.3 读取某个单元格的值

d = ws.cell(row=1, column=1).value
print(d)

使用sheet.cell会返回cell对象,再使用cell.value才能返回单元格的值,执行上述代码的结果如下:
Python-使用openpyxl读取excel内容

2.4 按行读取

按行读取可以用iter_rows()方法。

for row in ws.iter_rows():
    print(row)

执行上述代码的输出如下:
Python-使用openpyxl读取excel内容

由图可知,该方法应当是一个迭代器,返回的是row是一个tuple,里边是各个单元格cell。可以按照如下方法获取每列的值。

import pprint as pp
excel_list = []
for row in ws.iter_rows():
    row = list(row)
    for i in range(len(row)):
        row[i] = row[i].value
    excel_list.append(row)

pp.pprint(excel_list)

这里用到了一个模块pprint,用来使打印出的列表、字典等美观易读。print结果如下:
Python-使用openpyxl读取excel内容

可以看到已经将excel中的内容构建了一个列表,但是下边一些没有内容的行也读了进来,尽管每个单元的值是None,这是因为之前对下边的行做过编辑,然后又删掉,导致这些无内容的单元具有单元格格式,openpyxl会将这些单元格也识别进来,所以要想避免这种情况,使用xlrd库是一种办法,或者采用下面的办法:

excel_list = []
for row in ws.iter_rows():
    row = list(row)
    if row[3].value != None:
        for i in range(len(row)):
            row[i] = row[i].value
        excel_list.append(row)

pp.pprint(excel_list)

执行结果如下,可以看到全为None的行被过滤掉了。
Python-使用openpyxl读取excel内容

按列读取方法类似,使用iter_cols()。

2.5切片读取

有时候我们并不想读取表格里的全部内容,只想读取一部分,这时候可以用iter_rows()和iter_cols()的切片功能。

excel_list = []
for row in ws.iter_rows(min_row=2, min_col=2, max_row=3, max_col=3):
    row = list(row)
    if row[1].value != None:
        for i in range(len(row)):
            row[i] = row[i].value
        excel_list.append(row)

pp.pprint(excel_list)

执行结果如下,可以看到只获取了表格二行二列至三行三列的内容。
Python-使用openpyxl读取excel内容

2.6 利用表格行列坐标直接获取单元格、单元格的值、切片

除了上述使用sheet.cell(row, col)来获取单元格值,以及iter_rows/cols获取行、列、切片外,还可以直接用excel的行列坐标表示来获取上述内容。

pp.pprint(ws['B3'])  #获取B3单元格的cell对象
pp.pprint(ws['B3'].value) #获取B3单元格cell对象的值
pp.pprint(ws['A1':'B2']) # 获取A1:B2这个切片的cell们
pp.pprint(ws['A:B']) # 获取A列到B列的所有cell对象
pp.pprint(ws[1:2]) # 获取行1到行2两行的所有cell对象

这里要注意使用这种切片、获取行列对象值的时候不能直接用.value方法,.value只是单独cell即一个单元格的cell时才能直接用,所以要想用这种方法获取切片、行列的值时要配合遍历、列表等方法构建。

2.7快速获得工作表的行们和列们

使用sheet.rows 和sheet.cols。

pp.pprint(list(ws.rows))

执行结果如下:
Python-使用openpyxl读取excel内容

3.构建本任务所需字典

代码如下:

class ReadRegListExcel:
    def __init__(self, this_ws):
        self.reg_dic = {}
        self.ws = this_ws

    def excel_max_rows(self):
        max_rows = 0
        for row in ws.rows:
            if row[3].value != None:
                max_rows += 1
        return max_rows

    def construct_dic(self):
        max_rows = self.excel_max_rows()
        self.reg_dic['module name'] = self.ws.cell(row=1, column=2).value
        self.reg_dic['module base address'] = self.ws.cell(row=1, column=4).value
        self.reg_dic['registers'] = []
        row = 3
        all_rows = list(self.ws.rows)
        print(all_rows)
        while row <= max_rows:
            if all_rows[row-1][0].value != None:
                self.reg_dic['registers'].append({})
                self.reg_dic['registers'][-1]['register name'] = all_rows[row-1][0].value
                self.reg_dic['registers'][-1]['register address'] = all_rows[row-1][1].value
                self.reg_dic['registers'][-1]['fields'] = [[value.value for value in all_rows[row-1][2:7]]]
            else:
                self.reg_dic['registers'][-1]['fields'].append([value.value for value in all_rows[row-1][2:7]])
            row += 1
        return self.reg_dic

if __name__ == "__main__":
    reg_dic_obj = ReadRegListExcel(ws)
    reg_dic = reg_dic_obj.construct_dic()
    pp.pprint(reg_dic)

最后得到的寄存器字典如下:
Python-使用openpyxl读取excel内容

至此读入寄存器列表文件并构建出结构化的寄存器字典任务完成。文章来源地址https://www.toymoban.com/news/detail-839061.html

到了这里,关于Python-使用openpyxl读取excel内容的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python结合openpyxl库读取xlsx文件的每一行或每一列的内容进行处理

    openpyxl库是一个很好处理xlsx的python库。接下来,我主要介绍我是如何通过python代码读取xlsx的每一行或每一列的内容的。 一般xlsx第一列都是数据的字段,所以后续处理需要的话,还是先读取这一行再说 如果要看某一列的数据 例如

    2024年02月11日
    浏览(58)
  • 使用openpyxl包读取Excel文件时报错:zipfile.BadZipFile: File is not a zip file

    错误描述 使用openpyxl打开Excel文件,执行load_workbook方法时,报错 zipfile.BadZipFile: File is not a zip file 查看网上的一些说法: 使用 openpyxl 的 save 函数,将数据保存在 Excel 文件中。 在没有保存完成的情况下,又使用 load_workbook 函数加载该 Excel 文件。   解决方法:在执行save函数

    2024年02月03日
    浏览(47)
  • Python使用openpyxl读写excel文件

    需求:读入sample.xlsx中的信息,通过分析其中的身份证号信息,得到每个人的出生日期,性别,年龄,所在省份,星座,属相等等,将结果写入到另一个excel文件中。 首先,要使用openpyxl第三方库需要安装,安装方法如下: 程序一开头为了能使用第三方库,需要先导入 读入

    2024年02月09日
    浏览(36)
  • python 使用 openpyxl 处理 Excel 教程

    python 操作excel 的库有很多 ,有的库只能读取 xsl 格式,比如 xlrd 库; 有的库只能写 xsl 格式,比如 xlwt 库; 有的只能读写 xslx 格式,比如 openpyxl 库 。 综合各库及 xslx 格式比较常见,所以本文主要讲解 openpyxl 库对 xslx 格式的 excel 操作。 例如当使用 Pyramid, Flask 或 Django 等 we

    2024年02月10日
    浏览(58)
  • python使用OpenPyXl库对Excel进行操作

    参考:知乎文章 / OpenPyXL教程 / 博客园 目录 python使用OpenPyXl库对Excel进行操作 1. 基本概念 2. 判断文件是否存在 3. 创建和打开Excel文件 3.1. 创建Excel文件 3.2. 打开已有的Excel文件 4. 储存数据 5. sheet操作 6. cell操作 在OpenPyXl中的基本改变跟Excel文件中是完全一致的。 workbook sheet c

    2024年02月01日
    浏览(64)
  • [excel与dict] python 读取excel内容并放入字典、将字典内容写入 excel文件

    一 读取excel内容、并放入字典 1 读取excel文件 2 读取value,舍弃行号 3 读取为字典 一 读取excel内容、并放入字典(完整代码) 二、将字典内容写入 excel文件 1 假设已有字典内容为: 即student列表里有4个字典, 第一个字典里面有3对key-value \\\"num\\\": 1, \\\"name\\\": \\\"cod1\\\", \\\"wfm\\\": 0.1 2 导入Workb

    2024年02月04日
    浏览(51)
  • python使用openpyxl添加图片到excel文件中

    图片只能保存在某个sheet页面中,因此首先打开sheet页面: 然后创建一个图片: 最后保存即可: 最后的效果如下:

    2024年02月22日
    浏览(49)
  • pandas读取Excel核心源码剖析,面向过程仿openpyxl源码实现Excel数据加载

    📢作者: 小小明-代码实体 📢博客主页:https://blog.csdn.net/as604049322 📢欢迎点赞 👍 收藏 ⭐留言 📝 欢迎讨论! 今天我们将研究pandas如何使用openpyxl引擎读取xlsx格式的Excel的数据,并考虑以面向过程的形式简单的自己实现一下。 截止目前本人所使用的pandas和openpyxl版本为:

    2023年04月19日
    浏览(58)
  • GitHub Copilot 使用攻略,本篇文章作者是GPT-3.5

    引言: 在软件开发领域,编写高质量的代码是开发者们的永恒追求。然而,传统的编码过程常常耗费大量时间和精力,而且在遇到复杂的问题时,开发者可能会面临困惑和不确定性。为了解决这些挑战,GitHub推出了一款强大的工具——GitHub Copilot,它利用人工智能技术提供智

    2024年02月16日
    浏览(59)
  • 如何使用 Java 灵活读取 Excel 内容?

    在日常工作和学习中,我们经常需要从 Excel 文件中读取数据。对于少量数据,手动复制和粘贴可能是可行的,但是对于大量的数据,这种方法会变得非常低效。在这种情况下,使用 Java 程序自动读取 Excel 文件中的数据将是更好的选择。 本教程将介绍如何使用 Java 程序读取

    2024年02月07日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包