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 json

workbook = xlrd.open_workbook("E:\\studyproject\\python\\Excel数据读取\\摸排数据\\水源地.xls")

worksheet = workbook.sheet_by_name('Sheet1')


# 获取所有行数和列数
rows = worksheet.nrows
cols = worksheet.ncols

arr = []
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")

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LitJson-Json字符串转对像时:整型与字符串或字符串转:整型进的类型不一致的处理

目录 问题描述上代码测试代码各位看官,打赏个1元吧 Json数据格式是大家在游戏开中常量用的一种数据格式,某种程度上可以说是必备的。对unity开发来说,LitJson这个json库应该是被使用最多的json库了。 问题描述 今天说要的其中的这个api: Jso…

2024年中国电子学会青少年编程等级考试安排的通知

各有关单位、全体考生: 中国电子学会青少年等级考试(以下简称等级考试)是中国电子学会为落实《全民科学素质行动规划纲要》,提升青少年电子信息科学素质水平而开展的社会化评价项目。等级考试自2011年启动以来,作为中国电子学会科…

AGV用120°激光扫描避障雷达传感器DE系列功能与通道切换操作说明

AGV用120激光扫描避障雷达传感器DE系列,包含DE-4211、DE-4611、DE-4311、DE-4511等型号,可帮助AGV/AMR/机器人快速精准地检测障碍物,确保系统运行安全,帮助智能停车系统完成准确的数据判定,实现车位或充电桩占用检测等…

Linux 期末复习

Linux 期末复习 计算机历史 硬件基础 1,计算机硬件的五大部件:控制器、运算器、存储器、输入输出设备 2,cpu分为精简指令集(RISC)和复杂指令集(CISC) 3,硬件只认识0和1,最小单位是bit,最小存储单位是字…

【设计模式】一文理解记住设计模式的原则

目录——阅读所需预计5-10分钟 🎖️前言🎯单一职责原则📣1. 定义💞2. 定义很抽象,咱继续看🎉3. 举几个栗子💞4. 以上栗子出现了一个问题,单一职责的划分究竟可以分多细👉…

掌握Lazada API接口:开启电商开发新篇章,引领业务增长潮流

一、概述 Lazada API接口是Lazada平台提供的软件开发工具包,它允许第三方开发者通过编程方式访问Lazada平台上的商品、订单、用户等数据,并执行相关操作。通过使用Lazada API接口,开发者可以快速构建与Lazada平台集成的应用程序,…

Ubuntu 18.04.5 LTS 解决安装包复杂依赖相关问题解决的主要法则和VIM的安装实录

前言:目标和环境 环境: Ubuntu 18.04.5 LTSVMware 目标: 安装vim,解决包依赖的冲突: 本文,通过一个很好的实例,诠释了,LINUX系统下,安装一个应用遇到的依赖库问题如何…

单片机原理及应用:中断系统结构与控制寄存器

大家好啊,这几天因为考试断更了一段时间,现在放假了也可以恢复正常的更新速度了。今天我们来认识一下单片机的中断系统,这里可以说是我们学习单片机以来第一个核心功能,我们会分几期内容来深入了解中断系统的作用原理和应用方式。…

【K8S 云原生】Kurbernets集群的调度策略

目录 一、Kubernetes的list-watch机制 1、List-watch 2、创建pod的过程: 二、scheduler调度的过程和策略: 1、简介 2、预算策略:predicate 3、优先策略: 3.1、leastrequestedpriority: 3.2、balanceresourceal…

linux 系统安全及应用

一、账号安全基本措施 1.系统账号清理 1.将用户设置为无法登录 /sbin/nologin shell——/sbin/nologin却比较特殊,所谓“无法登陆”指的仅是这个用户无法使用bash或其他shell来登陆系统而已,并不是说这个账号就无法使用系统资源。举例来说,…

MySQL语法练习-DML语法练习

文章目录 0、相关文章1、添加数据2、修改数据3、删除数据4、总结 0、相关文章 《MySQL练习-DDL语法练习》 1、添加数据 # 给指定字段添加数据 insert into 表名 (字段名1,字段名2,...) values(值1,值2...);# 给全部字段添加数据 insert into 表名 values(值1,值2,...);#批量…

Mac robotframework+pycharm运行suite报错情况:ImportError: No module named request

报错实例: 当前Preferences–>Tool–>External Tools Suite配置,显示使用的python为2.7版本,robotframework安装在当前版本的python中: 但是我pycharm现在的环境配置的python为3.11,当前使用的RF与当前使用的py…

5.2 Android BCC环境搭建(adeb版,下)更新中

五&#xff0c;运行adeb shell adeb shell 六&#xff0c;其他指令 6.1 从开发机移除adeb adeb remove 6.2 更新开发机adeb deb git-pull 6.3 使用ssh替代adeb进行与android设备的通信 adeb --ssh <uri> --sshpass <pass> <cmd> 七&#xff0c;BCC配置…

1-05使用VS调式程序

一、概述 写代码总不是一帆风顺的&#xff0c;总会碰到一些问题&#xff0c;检查问题&#xff0c;排除错误&#xff08;也就是Debug程序&#xff09;&#xff0c;对于任何程序员而言都是基本功。 我们前面讲过&#xff0c;C语言是一门很容易出错&#xff0c;且自身不提供异常…

excel统计分析——LSD多重比较

参考资料&#xff1a;生物统计学 一篇教你搞定显著性差异分析abcd字母标记法 LSD&#xff08;least significant difference&#xff0c;最小显著差数法&#xff09;是R. A. Fisher提出的&#xff0c;又称为Fisher LSD检验法&#xff0c;是最早用于检验各组均数间两两差异的方…

软件工程概论---内聚性和耦合性

目录 一.耦合性 1.内容耦合 2.公共耦合 4.控制耦合 5.标记耦合&#xff08;特征耦合&#xff09; 6.数据耦合 7.非直接耦合 二.内聚性 1.偶然内聚 2.逻辑内聚 3.时间内聚 4.过程内聚 5.通信内聚 6.顺序内聚 7.功能内聚 一.耦合性 耦合性是指软件结构中模块相互…

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

前言&#xff1a; 开始学到api的String&#xff0c;整理下心得。打好基础&#xff0c;daydayup! API&#xff1a; API是什么&#xff1f; API&#xff08;Application Programming Interface&#xff09;又名应用程序编程接口。是别人编好的程序的合集。 为什么要使用API&…

YOLOv5改进 | 2023Neck篇 | 利用Gold-YOLO针对小目标进行检测(附完整修改教程 + 代码)

一、本文介绍 本文给大家带来的改进机制是Gold-YOLO利用其Neck改进v8的Neck,GoLd-YOLO引入了一种新的机制——信息聚集-分发(Gather-and-Distribute, GD)。这个机制通过全局融合不同层次的特征并将融合后的全局信息注入到各个层级中,从而实现更高效的信息交互和融合。这种…

关于订单超时后用户却已支付的解决方案

场景: 一般我们下的一些订单&#xff0c;比如电商平台、外卖平台的都是有超时时间的&#xff0c;默认一般15或者30分钟&#xff0c;那么超时未支付订单会被自动取消&#xff0c;那么如果刚好有人在关闭订单的时候去支付成功了&#xff0c;或者说支付平台延迟了一下&#xff0c;…

开启Android学习之旅-5-Activity全屏

Android 两种方式设置全屏&#xff1a; 1. 第一行代码中的方法 通过 getWindow().getDecorView()方法拿到当前Activity的DecorView,再调用 setSystemUiVisibility() 方法来改变系统UI的显示&#xff0c;这里传入了 View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 和 View.SYSTEM_UI_…