Python从入门到网络爬虫(读写Excel详解)
前言
Python操作Excel的模块有很多,并且各有优劣,不同模块支持的操作和文件类型也有不同。最常用的Excel处理库有xlrd、xlwt、xlutils、xlwings、openpyxl、pandas,下面是各个模块的支持情况:
工具名称 | .xls | .xlsx | 获取文件内容 | 写入数据 | 修改文件内容 | 保存 | 样式调整 | 插入图片 |
---|---|---|---|---|---|---|---|---|
xlrd | √ | √ | √ | × | × | × | × | × |
xlwt | √ | × | × | √ | × | √ | √ | √ |
xlutils | √ | × | × | √ | √ | √ | × | × |
xlwings | √ | √ | √ | √ | √ | √ | √ | √ |
openpyxl | × | √ | √ | √ | √ | √ | √ | √ |
pandas | √ | √ | √ | √ | × | √ | × | × |
对比会发现,其中xlwings的功能是最全最强大的,其实它的执行效率也是最高的。但是xlwings的学习难度相对比较大,而且里面的很多的概念和操作方式和平时操作Excel的时候不一样。openpyxl 的问题是不能操作老版本的excel文件(.xls),以及在操作数据的时候必须以单元格为单位操作,无法直接以行或者列的方式操作文件内容。xlrd、xlwt和xlutils三个模块配合使用可以很方便的对excel文件进行读、写和修改操作,也可以更方便的以行列的方式操作Excel文件,但是缺点是无法对.xlsx文件进行写和修改操作。在解决实际问题的时候读者可以根据自己的实际需求选择使用合适的工具。
下面主要介绍xlrd、xlwt模块如何实现对.xls和.xlsx文件进行读写操作。
1. Excel文件中的工作簿、工作表
在使用工具库操作Excel之前,我们先来了解一下Excel中工作簿、工作表的感念。
1.1 工作簿
工作簿:excel工作簿就是excel电子表格文件。excel是以工作薄来存储数据的,工作簿文件是excel存储在磁盘上的最小独立文件,它由多个工作表组成,在excel中数据和图表都是以工作表的形式存储在工作簿文件中的。简单的来说一个Excel文件(.xls、.xlsx)就是一个工作簿。
1.2 工作表
工作表:工作表是显示在工作簿窗口中的表格,一个工作表可以由1048576行和256列构成,行的编号从1到1048576,列的编号依次用字母A、B ……IV表示,行号显示在工作簿窗口的左边,列号显示在工作簿窗口的上边。
Excel默认一个工作簿有三个工作表,用户可以根据需要添加工作表,但每一个工作簿中的工作表个数受可用内存的限制,当前的主流配置已经能轻松建立超过255个工作表了。
2. 使用xlrd读取Excel文件数据
2.1 安装xlrd
pip install xlrd
2.2 打开工作簿
# 引入xlrd
import xlrd# 打开Excel文件
workbook = xlrd.open_workbook("E:\\studyproject\\python\\Excel数据读取\\费县摸排数据\\林种.xls")
2.3 获取与打开工作表
一个工作簿中通常有多个工作表,我们可以使用sheet_names()方法获取所有工作表
# 获取打开工作簿中的所有工作表名 返回工作表名称列表
sheet_names = workbook.sheet_names()# 数据结果
# ['Sheet1','Sheet2','Sheet3']
上一步中我们获取到了,我们可以通过工作表名称或者工作表的排序索引打开工作表
# 通过工作表名称打开工作表
worksheet = workbook.sheet_by_name('Sheet1')# 通过工作表排序的索引打开工作表
worksheet = workbook.sheet_by_index(0)
也可以通过sheets()方法来获取全部工作表
# #获取所有的sheet对象
sheets = workbook.sheets()
for sheet in sheets:print(sheet.name)#结果: 1班 2班
2.4 读取单元格数据
获取到工作表之后,我们可以通过rows和cols两个属性来获取工作表的行数和列数
# 工作表行数
rows = worksheet.nrows# 工作表列数
cols = worksheet.ncols
通过行号和列表获取指定单元格中的数据
worksheet.cell_value(row, col)
获取指定行的某几列
worksheet.row_values(row,start_col,end_col)
获取指定列的某几行
worksheet.col_values(col,start_row,end_row)
2.5 应用实例
将Excel数据处理转换为json数据,是日常工作中最常见的一项实例,下面的实例我们就使用xlrd将读取Excel文件,转换获取json数据
import xlrd
import jsonworkbook = xlrd.open_workbook("E:\\studyproject\\python\\Excel数据读取\\摸排数据\\水源地.xls")worksheet = workbook.sheet_by_name('Sheet1')# 获取所有行数和列数
rows = worksheet.nrows
cols = worksheet.ncolsarr = []
for row in range(rows):obj = {}for col in range(cols):obj[worksheet.cell_value(0, col)] = worksheet.cell_value(row, col)arr.append(obj)print(arr)josnstr = json.dump(arr)# # print(josnstr)
3. 使用xlrw实现Excel写入数据
3.1 安装xlrw
pip install xlwt
3.2 创建工作簿
# 导入工具包
import xlwt# 创建一个工作簿
workbook = xlwt.Workbook(encoding="utf-8")
3.3 创建工作表
# 创建一个工作表
worksheet = workbook.add_sheet('小马过河')
3.4 往单元格里写入数据
通过行号和列号往Excel表格中写入内容
# 参数对应 行, 列, 值
worksheet.write(1,0, label = 'hello world!')
最后保存生成(.xls)格式的Excel文件
# 保存
workbook.save('学习笔记.xls')
3.5 实际应用实例
将从数据库中读取的数据写入到Excel文件中
import pymysql
import xlwt# 创建数据库链接对象
database = pymysql.connect(host="127.0.0.1",user="root",password="123456",database="toutiao",port=3306,charset="utf8"
)# 创建游标对象
cursor = database.cursor()# 游标对象使用execute()方法执行SQL语句
try:workbook = xlwt.Workbook(encoding="utf-8")worksheet = workbook.add_sheet("热门文章")# 执行查询语句cursor.execute("select title,publish_time,like_count,read_count,comment_count from happy limit 1,10")# 获取查询结果result = cursor.fetchall()for i in range(0,len(result)):for j in range(0,len(result[i])):worksheet.write(i,j,label=result[i][j])except Exception as e:print(e)
finally:# 关闭游标cursor.close()# 关闭数据库database.close()workbook.save("热门文章.xls")
相关文章:

Python从入门到网络爬虫(读写Excel详解)
前言 Python操作Excel的模块有很多,并且各有优劣,不同模块支持的操作和文件类型也有不同。最常用的Excel处理库有xlrd、xlwt、xlutils、xlwings、openpyxl、pandas,下面是各个模块的支持情况: 工具名称.xls.xlsx获取文件内容写入…...

Mysql之子查询、连接查询(内外)以及分页查询
目录 一.案例(接上篇博客) 09)查询学过「张三」老师授课的同学的信息 10)查询没有学全所有课程的同学的信息 11)查询没学过"张三"老师讲授的任一门课程的学生姓名 12)查询两门及其以上不及格课程…...
计算机的存储单位
在计算机中,只能识别二进制。 byte是1个字节,是8个比特位,所以byte可以存储的最大值是:01111111,byte是 [-128 ~ 127] 共可以标识256个不同的数字。 1字节 8bit(8比特)--> 1byte 8bit 类…...
设备树文件中的设备节点
一. 简介 前面几篇文章学习了 关于设备树文件的编译,设备树文件的调用。 本文开始学习 设备树文件的语法。具体学习设备节点与标准属性。 二. 设备树文件之设备节点与标准属性 1. 设备节点 设备树 是采用树形结构来描述板子上的设备信息的文件,每…...

文件管理工具.netcore资源文件管理
文件管理工具 怎么快速有效的管理我的文件包括文件夹,需求功能是 模糊搜索显示匹配的文件夹或文件数据 快速打开文件夹位置 在windows直接查看搜索速度太慢,范围宽泛,整理所需资源文件名和文件本机路径保存在数据库,可以在数据库中…...
go-carbon v2.3.4 发布,轻量级、语义化、对开发者友好的 Golang 时间处理库
carbon 是一个轻量级、语义化、对开发者友好的 golang 时间处理库,支持链式调用。 目前已被 awesome-go 收录,如果您觉得不错,请给个 star 吧 github.com/golang-module/carbon gitee.com/golang-module/carbon 安装使用 Golang 版本大于…...

vue3 内置组件
文章目录 前言一、过渡效果相关的组件1、Transition2、TransitionGroup 二、状态缓存组件(KeepAlive)三、传送组件(Teleport )四、异步依赖处理组件(Suspense) 前言 在vue3中 其提供了5个内置组件 Transiti…...
MFC如何动态创建button按钮并添加点击事件
在MFC中,可以使用CButton类来动态创建按钮。下面是一个示例代码,演示了如何动态创建按钮并添加点击事件: 在对话框类的头文件中声明按钮变量: CButton m_btnDynamic;在对话框的OnInitDialog()函数中使用Create()函数创建按钮&am…...

Qt - QML框架
文章目录 1 . 前言2 . 框架生成3 . 框架解析3.1 qml.pro解析3.2 main.cpp解析3.3 main.qml解析 4 . 总结 【极客技术传送门】 : https://blog.csdn.net/Engineer_LU/article/details/135149485 1 . 前言 什么是QML? QML是一种用户界面规范和编程语言。它允许开发人员…...

Python+Flask+MySQL的图书馆管理系统【附源码,运行简单】
PythonFlaskMySQL的图书馆管理系统【附源码,运行简单】 总览 1、《的图书馆管理系统》1.1 方案设计说明书设计目标需求分析工具列表 2、详细设计2.1 登录2.2 注册2.3 程序主页面2.4 图书新增界面2.5 图书信息修改界面2.6 普通用户界面2.7 其他功能贴图 3、下载 总览…...
Module-Federation[微前端]
Module-Federation 微前端简介我们为什么没有延续使用【乾坤】使用Module-Federation 优/缺EMP 优EMP 缺图解DEMO详解`Tips:` [文件资源](https://download.csdn.net/download/alnorthword/88699315)微前端简介 微前端是借鉴了微服务的理念,将一个庞大的应用拆分成多个独立灵活…...

Spring 动态数据源事务处理
在一般的 Spring 应用中,如果底层数据库访问采用的是 MyBatis,那么在大多数情况下,只使用一个单独的数据源,Spring 的事务管理在大多数情况下都是有效的。然而,在一些复杂的业务场景下,如需要在某一时刻访问不同的数据库,由于 Spring 对于事务管理实现的方式,可能不能达…...

WSL2-Ubuntu22.04子系统图形化界面搭建与远程桌面连接
提示:文中不提供WSL2子系统搭建步骤,假定子系统已建立好: 文章目录 检查WSL子系统状态图形化界面安装远程桌面连接可能遇到的相关问题xrdp状态异常远程桌面黑屏 检查WSL子系统状态 wsl -l -v如下图所示为正常 图形化界面安装 以此执行如下…...
【sklearn练习】model常用属性和功能
介绍 scikit-learn 中的机器学习模型(estimator)通常具有一组常用属性和功能,这些属性和功能可以用于训练、评估和使用模型。以下是一些常见的模型属性和功能: 常见属性: coef_:对于线性模型(…...
IO类day01
File类 File类的每一个实例可以表示硬盘(文件系统)中的一个文件或目录(实际上表示的是一个抽象路径) 使用File可以做到: 1:访问其表示的文件或目录的属性信息,例如:名字,大小,修改时间等等 2:创建和删除文件或目录 3:访问一个目录中的子项 但是File不能访问文件数据. pu…...

软件测试大作业||测试计划+测试用例+性能用例+自动化用例+测试报告
xxx学院 2023—2024 学年度第二学期期末考试 《软件测试》(A)试题(开卷) 题目:以某一 web 系统为测试对象,完成以下文档的编写: (满分 100 分) (1&am…...

适用于任何公司的网络安全架构
1.第一等级:基础级 优势 可防范基本有针对性的攻击,使攻击者难以在网络上推进。将生产环境与企业环境进行基本隔离。 劣势 默认的企业网络应被视为潜在受损。普通员工的工作站以及管理员的工作站可能受到潜在威胁,因为它们在生产网络中具有基本和管理…...

Excel:通过excel将表数据批量转换成SQL语句
这里有一张表《student》,里面有10条测试数据,现在将这10条测试数据自动生成 insert语句,去数据库 批量执行 P.S. 主要用到excel表格中的 CONCATENATE函数,将单元格里面的内容填入到sql里面对应的位置 1. 先写好一条insert语句&a…...

Android linphone-android sdk设置语音编码问题
1.遇到的问题 今天遇到linphone-android sdk需要解决语音编码问题,需要指定编码。查了下配置,里面没有发现类似的配置。 ## Start of factory rc # This file shall not contain path referencing package name, in order to be portable when app is r…...
Hyperledger Fabric Orderer 配置解析
文中使用的 fabric 版本为 2.4.1 排序节点在 Fabric 网络中为 Peer 提供排序服务。与 Peer 节点类似,排序节点支持从命令行参数、环境变量或配置文件中读取配置信息。环境变量中配置需要以 ORDERER_前缀开头,例如,配置文件中的 general.Liste…...

React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...
uniapp获取当前位置和经纬度信息
1.1. 获取当前位置和经纬度信息(需要配置高的SDK) 调用uni-app官方API中的uni.chooseLocation(),即打开地图选择位置。 <button click"getAddress">获取定位</button> const getAddress () > {uni.chooseLocatio…...

实现p2p的webrtc-srs版本
1. 基本知识 1.1 webrtc 一、WebRTC的本质:实时通信的“网络协议栈”类比 将WebRTC类比为Linux网络协议栈极具洞察力,二者在架构设计和功能定位上高度相似: 分层协议栈架构 Linux网络协议栈:从底层物理层到应用层(如…...