Python 的pandas模块使用xlrd作为读取 excel 文件的默认引擎。但是,xlrd在其最新版本(从 2.0.1 版本开始)中删除了对 xls 文件以外的任何文件的支持。

xlsx files are made up of a zip file wrapping an xml file.

Both xml and zip have well documented security issues, which xlrd was not doing a good job of handling. In particular, it appeared that defusedxml and xlrd did not work on Python 3.9, which lead people to uninstall defusedxml as a solution, which is absolutely insane, but then so is sticking with xlrd 1.2 when you could move to openpyxl.

从官方的邮件中,说的应该是 xlsx 本身是由一个 zip 文件和 xml 的头文件构成的,但是 xml 和 zip 都有详细记录的安全问题,特别是,defusedxml和xlrd似乎在 Python 3.9 上不起作用,这导致人们卸载defusedxml作为解决方案,这绝对是疯了,但是,当然了,您也可以转移到openpyxl,或者仍然坚持使用xlrd 1.2。

$ conda search xlrd
Loading channels: done
# Name                       Version           Build  Channel
xlrd                           1.0.0          py27_0  conda-forge
xlrd                           1.0.0          py27_1  conda-forge
xlrd                           1.0.0          py35_0  conda-forge
xlrd                           1.0.0          py35_1  conda-forge
xlrd                           1.0.0          py36_0  conda-forge
xlrd                           1.0.0          py36_1  conda-forge
xlrd                           1.1.0          py27_1  pkgs/main
xlrd                           1.1.0  py27ha77178f_1  pkgs/main
xlrd                           1.1.0          py35_1  pkgs/main
xlrd                           1.1.0  py35h45a0a2a_1  pkgs/main
xlrd                           1.1.0          py36_1  pkgs/main
xlrd                           1.1.0  py36h1db9f0c_1  pkgs/main
xlrd                           1.1.0          py37_1  pkgs/main
xlrd                           1.1.0            py_2  conda-forge
xlrd                           1.2.0          py27_0  pkgs/main
xlrd                           1.2.0          py36_0  pkgs/main
xlrd                           1.2.0          py37_0  pkgs/main
xlrd                           1.2.0            py_0  conda-forge
xlrd                           1.2.0            py_0  pkgs/main
xlrd                           1.2.0    pyh9f0ad1d_1  conda-forge
xlrd                           2.0.1    pyhd3eb1b0_0  pkgs/main
xlrd                           2.0.1    pyhd8ed1ab_3  conda-forge

上面的问题将导致您在使用pandas调用 xlsx excel 上的read_excel函数时收到一个错误,即不再支持 xlsx filetype。



为了解决这个问题,你可以:

  1. 安装 openpyxl 模块:这是另一个仍然支持 xlsx 格式的 excel 处理包。
  2. 在pandas中把默认的 engine 由原来的xlrd替换成openpyxl。

# Install openyxl
pip install openpyxl

# set engine parameter to "openpyxl"
pd.read_excel(path, engine = 'openpyxl')

接下来,介绍一下 Python 读写 Excel 需要导入的xlrd(读),xlwd(写)模块的一些常用操作。

1. xlrd 模块

1.1 Excel 文件处理

  • 打开 excel 文件

import xlrd
excel = xlrd.open_workbook("data.xlsx")  
  • 获取并操作 sheet 工作表

sheet_names = excel.sheet_names()            # 返回book中所有工作表的名字, ['Sheet1', 'Sheet2', 'Sheet3']    
excel.sheet_loaded(sheet_name or indx)   # 检查某个sheet是否导入完毕

# 以下三个函数都会返回一个 xlrd.sheet.Sheet() 对象
sheet = excel.sheet_by_index(0)         # 通过索引获取,例如打开第一个 sheet 表格
sheet = excel.sheet_by_name("sheet1")  # 通过名称获取,如读取 sheet1 表单
sheet = excel.sheets()[0]               # 通过索引顺序获取

sheet.row_values(0) #获取第一行的数据
sheet.col_values(0) #获取第一列的数据
sheet.nrows          #获取总共的行数
sheet.ncols          #获取总共的列数
  • 遍历所有行

for i in range(0, sheet.nrows):
    row_list = sheet.row_values(i) # 每一行的数据在row_list数组里

1.2 日期处理

import datetime
from xlrd import xldate_as_datetime

xldate_as_datetime(43346.0, 0).strftime('%Y/%m/%d') 
# '2018/09/03'

2. xlwt 模块

2.1 创建 Book 工作簿(即 excel 工作簿)

import xlwt
workbook = xlwt.Workbook(encoding = 'utf-8')    # 创建一个workbook并设置编码形式

2.2 添加 sheet 工作表

worksheet = workbook.add_sheet('My Worksheet')  # 创建一个worksheet

2.3 向工作表中添加数据并保存

worksheet.write(1,0, label = 'this is test') # 参数对应行, 列, 值

workbook.save('save_excel.xls')  # 保存

Python 中常见的 TypeError 是什么?

2021-04-16

Python 列表、字典、元组的一些小技巧

2021-03-30

如何卸载 python setup.py install 安装的包?

2020-05-15

生物信息学 Python 入门之源码安装

2019-09-29

Python 文件与目录操作方法总结

2019-02-17

本文分享自微信公众号 - 生信科技爱好者(bioitee)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

Python Excel 操作 | xlrd+xlwt 模块笔记的更多相关文章

  1. Python Excel操作——xlrd、xlwd

    读取 1.导入模块 import xlrd 2.打开Excel文件读取数据 data = xlrd.open_workbook('excel.xls') 3.获取一个工作表 1 table = dat ...

  2. Python如何读写Excel文件-使用xlrd/xlwt模块

    时间: 2020-08-18 整理: qiyuan 安装和导入 1.模块介绍 在 python 中使用 xlrd/xlwt 和 openpyxl 模块可以对Excel电子表格(xls.xlsx文件)进 ...

  3. 【转】python操作excel表格(xlrd/xlwt)

    [转]python操作excel表格(xlrd/xlwt) 最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异, ...

  4. 转载:python操作excel表格(xlrd/xlwt)

    python操作excel表格(xlrd/xlwt)   最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异,而 ...

  5. python excel操作

    python操作excel表格(xlrd/xlwt)转载:http://www.cnblogs.com/zhoujie/p/python18.html   最近遇到一个情景,就是定期生成并发送服务器使 ...

  6. python数据库操作之pymysql模块和sqlalchemy模块(项目必备)

    pymysql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同. 1.下载安装 pip3 install pymysql 2.操作数据库 (1).执行sql #! ...

  7. python excel操作总结

    1.openpyxl包的导入 Dos命令行输入 pip install openpyxl==2.3.3 这里注意一下openpyxl包的版本问题 版本装的太高有很多api不支持了,所以笔者这里用的是2 ...

  8. 【Python】excel读写操作 xlrd & xlwt

    xlrd ■ xlrd xlrd模块用于读取excel文件内容 基本用法: workbook = xlrd.open_workbook('文件路径') workbook.sheet_names() # ...

  9. Python操作Excel表格,xlwt模块的使用

    Python可以操作Excel的模块不止一种,我习惯使用的写入模块是xlwt(一般都是读写模块分开的) 按照模块使用pip install xlwt 就行了,很常规的方式 直接进代码解析,本文源码 w ...

  10. python(读取excel操作-xlrd模块)

    一.安装xlrd模块 到python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了python 环境. 或者在cmd窗口  pip install  ...

随机推荐

  1. conda环境下使用nvcc -V报错nvcc: command not found的一种解决方法

    前言 缘起  实验室的学弟问我为什么他使用nvcc命令报错,起先我以为他用的是老师给的root账户,按照参考文献1便可以解决问题.  但由于并非root用户,/usr/local下没有cuda,于是便 ...

  2. MyBatis 整体架构【包含 SQL执行流程】

    Mybatis 的整体架构分为三层,分别是基础支持层.核心处理层和接口层.基础支持层为核心处理层的功能提供了良好的支撑.

  3. new做了哪些事情,手写一个new

    1)创建一个空对象,将构造函数中的this指向这个空对象 2)将空对象的__proto__指向构造函数的prototype原型 3)执行构造函数里面的代码,为这个空对象添加属性和方法 4)返回一个新的 ...

  4. MySQL与Java常用数据类型的对应关系

    一.字符串数据类型: MySQL类型名 大小 用途 对应Java类名 char 0-255 bytes 定长字符串 (姓名.性别.学号) String varchar 0-65535 bytes 变长 ...

  5. 温故知新----线程之Runnable与Callable接口的本质区别

    温故知新----线程之Runnable与Callable接口的本质区别 预备知识:Java中的线程对象是Thread,新建线程也只有通过创建Thread对象的实例来创建. 先说结论 1 Runnabl ...

  6. 记一次 .NET 某手术室行为信息系统 内存泄露分析

    一:背景 1. 讲故事 昨天有位朋友找到我,说他的程序内存存在泄露导致系统特别卡,大地址也开了,让我帮忙看一下怎么回事?今天上午看了下dump,感觉挺有意思,在我的分析之旅中此类问题也蛮少见,算是完善 ...

  7. 彻底弄懂C#中delegate、event、EventHandler、Action、Func的使用和区别

    [目录] 1 委托 2 事件-概念的引出 3 事件-关于异常 4 事件-关于异步 5 委托-Func与Action 1 委托 在.NET中定义"委托"需要用到delegate关键字 ...

  8. 联想拯救者Y9000P 2023版 双系统ubuntu安装nvidia显卡驱动、cuda及cudnn简明教程

    前言 对于从事机器学习.深度学习.图像处理.自然语言处理等科研与工作的小伙伴们,ubuntu系统是一个不错的选择,本人前几天入手拯救者y9000p 2023版本,配置为:RTX4060 16G 13代 ...

  9. [网络/Java EE/Web]Tomcat/Nginx中配置全局的安全响应头(header)——X-Frame-Options / X-XSS-Protection / X-Content-Options

    Step1 配置Tomcat step1.1 查看是否已配置目标的HTTP网络安全头 方式1 – Tomcat / conf/web.xml cat /opt/myTomcat/conf/web.xm ...

  10. TS(二)内置对象与class类

    内置对象 ECMA内置对象 Boolean.Number.String.RegExp.Date.Error const regexp:RegExp = /\w\d\s const number:Num ...