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),以及在操作数据的时候必须以单元格为单位操作,无法直接以行或者列的方式操作文件内容。xlrdxlwtxlutils三个模块配合使用可以很方便的对excel文件进行读、写和修改操作,也可以更方便的以行列的方式操作Excel文件,但是缺点是无法对.xlsx文件进行写和修改操作。在解决实际问题的时候读者可以根据自己的实际需求选择使用合适的工具。

下面主要介绍xlrdxlwt模块如何实现对.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")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/607519.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用vscode开发小程序项目

使用vscode开发uni-app 这里的创建使用用vue3ts版本,如过是vue2,具体可参考官网命令 uni-app官网 首先创建uni-app npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project需要再vscode中下载uni-app插件,以方便开发 uni-create-view …

java常用应用程序编程接口(API)——String概述及使用案例

前言: 开始学到api的String,整理下心得。打好基础,daydayup! API: API是什么? API(Application Programming Interface)又名应用程序编程接口。是别人编好的程序的合集。 为什么要使用API&…

5分钟搭建开源运维监控工具Uptime Kuma并实现无公网IP远程访问

文章目录 **主要功能**一、前期准备本教程环境为:Centos7,可以跑Docker的系统都可以使用本教程安装。本教程使用Docker部署服务,如何安装Docker详见: 二、Docker部署Uptime Kuma三、实现公网查看网站监控四、使用固定公网地址访问…

数组中元素的插入和查找算法探究

数组的查找 线性查找 概念 线性查找也叫顺序查找,这是最基本的一种查找方法,从给定的值中进行搜索,从一端开始逐一检查每个元素,直到找到所需元素的过程。 元素序列的排列可以有序,也可以无序。 代码实现 public cl…

检查unity打包IOS包含dlopen的块

unity打包IOS包含dlopen 工程中含有以下命名空间:同时link.xml含有一下内容 工程中含有以下命名空间: System.Net.Security: sslStream.AuthenticateAsServer sslStream.AuthenticateAsClientSystem.Xml: XmlDocumentSystem.Net.WebSockets ClientWebSocket.ConnectAsyncSyste…

JVM,Java堆区、新生代、老年代,创建对象的内存分配,分代垃圾收集思想、堆区产生的错误

JVM堆区 堆(Heap)堆区的组成:新生代老年代堆空间的大小设置创建对象的内存分配堆区的分代垃圾收集思想堆区产生的错误 堆(Heap) ​ Heap堆区,用于存放对象实例和数组的内存区域 ​ Heap堆区,是…

手把手带你死磕ORBSLAM3源代码(三十六)Tracking.cc CreateMapInAtlas

目录 一.前言 二.代码 2.1完整代码 2.2 IMU::Preintegrated介绍 2.3 IMU:Bias介绍 一.前言 这段代码是在某个视觉追踪或SLAM(同时定位与地图构建)系统中创建一个新的地图或地图集的一部分。具体来说,它属于Tracking

Vue2:通过props给组件传数据

一、业务场景 我们在使用Vue组件时,常常会复用Vue组件,那么,问题来了,复用的时候,业务数据不相同,怎么办了? 这里我们就需要学习新的属性:props来实现这个功能。 这样,组…

Java刷题错题笔记-day05-集合(CopyOnWriterArrayList、HashMap)

1.CopyOnWriterArrayList是强一致性列表吗? 不是 CopyOnWriteArrayList 不提供强一致性主要是因为它的修改操作是在一个新的拷贝上进行的,而不是直接在原始数据结构上。这种设计决策带来了一些影响: 读取操作不阻塞: CopyOnWrite…

zabbix的API调用

zabbix的API调用 资料参考:https://www.zabbix.com/documentation/4.0/zh/manual/api 看api文档就可以了,粘两个例子吧,如果配置了域名,可以请求域名 [rootnode ~]# vi zabbix_login.api curl -XPOST -H "Content-Type: ap…

探寻未来卫生新境界:互联网公厕是什么意思

近年来,科技的飞速发展深刻改变了我们生活的方方面面,而公共卫生领域也在这场变革中迎来了一场前所未有的革命。在这个新时代,一个备受瞩目的概念逐渐崭露头角——那就是“互联网公厕”。这究竟意味着什么?是一场卫生革新的崛起&a…

动手学深度学习4 线性代数

动手学深度学习4 线性代数 1. 线性代数--数学意义2. 线性代数的实现3. 按特定轴求和4. 线性代数QA 1. 线性代数–数学意义 视频:https://www.bilibili.com/video/BV1eK4y1U7Qy/?spm_id_fromautoNext&vd_sourceeb04c9a33e87ceba9c9a2e5f09752ef8 课件&#xff…

Protobuf 反射技术简介

对于反射大家应该不会陌生,如果你接触过一些框架(如 ORM、IOC、OSGi 等) 的内部实现,应该更能体会反射技术的应用可谓无处不在。 反射概念最早出现于人工智能领域,20 世纪 70 年代末被引入到程序语言设计中。1982 年 …

swaggerUI不好用,试试这个openapiUI?

title: swaggerUI不好用,试试这个openapiUI? date: 2024-01-08 categories: [tool] tags: [openapi,工具] description: 基于swaggger2, openapi3规范的UI文档 1.背景 由于长期使用 swaggerUI 工具,它的轻量风格个人觉得还是不错的,但是它…

【漏洞复现】Hikvision SPON IP网络对讲广播系统存在命令执行漏洞CVE-2023-6895

漏洞描述 Hikvision Intercom Broadcasting System是中国海康威视(Hikvision)公司的一个对讲广播系统。 Hikvision Intercom Broadcasting System是中国海康威视(Hikvision)公司的一个对讲广播系统。Hikvision Intercom Broadcasting System 3.0.3_20201113_RELEASE(HIK)版…

vulhub中的Apache SSI 远程命令执行漏洞

Apache SSI 远程命令执行漏洞 1.cd到ssi-rce cd /opt/vulhub/httpd/ssi-rce/ 2.执行docker-compose up -d docker-compose up -d 3.查看靶场是否开启成功 dooker ps 拉取成功了 4.访问url 这里已经执行成功了,注意这里需要加入/upload.php 5.写入一句话木马 &…

微信预约小程序制作指南:从小白到专家

在当今的数字时代,微信小程序已经成为了一种非常流行的应用方式。预约功能更是成为了许多小程序的核心功能之一。如果你也想为你的小程序添加预约功能,以下步骤将会对你有所帮助。 一、进入乔拓云网后台 乔拓云网是一个在线小程序开发平台,你…

golang指针介绍

前言 简单记录下,GO语言中的指针类型和值类型的使用,以及二两之前的区别 目录 前言指针类型介绍值类型和指针类型的使用区别值类型(Value Types):指针类型(Pointer Types):示例&…

如何使用Docker部署开源CMF Drupal并结合cpolar内网穿透远程访问

文章目录 前言1. Docker安装Drupal2. 本地局域网访问3 . Linux 安装cpolar4. 配置Drupal公网访问地址5. 公网远程访问Drupal6. 固定Drupal 公网地址 前言 Dupal是一个强大的CMS,适用于各种不同的网站项目,从小型个人博客到大型企业级门户网站。它的学习…

【软考中级-软件设计师】day4:数据结构-线性表、单链表、栈和队列、串

大纲 线性结构 顺序存储和链式存储区别 单链表的插入和删除 真题 栈和队列 真题 串