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 打开工作簿

python 复制代码
# 引入xlrd
import xlrd

# 打开Excel文件
workbook = xlrd.open_workbook("E:\\studyproject\\python\\Excel数据读取\\费县摸排数据\\林种.xls")

2.3 获取与打开工作表

一个工作簿中通常有多个工作表,我们可以使用sheet_names()方法获取所有工作表

python 复制代码
# 获取打开工作簿中的所有工作表名 返回工作表名称列表
sheet_names = workbook.sheet_names()

# 数据结果
# ['Sheet1','Sheet2','Sheet3']

上一步中我们获取到了,我们可以通过工作表名称或者工作表的排序索引打开工作表

python 复制代码
# 通过工作表名称打开工作表
worksheet = workbook.sheet_by_name('Sheet1')

# 通过工作表排序的索引打开工作表
worksheet = workbook.sheet_by_index(0)

也可以通过sheets()方法来获取全部工作表

python 复制代码
# #获取所有的sheet对象
sheets = workbook.sheets()
for sheet in sheets:
  print(sheet.name)#结果: 1班 2班

2.4 读取单元格数据

获取到工作表之后,我们可以通过rows和cols两个属性来获取工作表的行数和列数

python 复制代码
# 工作表行数
rows = worksheet.nrows

# 工作表列数
cols = worksheet.ncols

通过行号和列表获取指定单元格中的数据

python 复制代码
worksheet.cell_value(row, col)

获取指定行的某几列

python 复制代码
worksheet.row_values(row,start_col,end_col)

获取指定列的某几行

python 复制代码
worksheet.col_values(col,start_row,end_row)

2.5 应用实例

将Excel数据处理转换为json数据,是日常工作中最常见的一项实例,下面的实例我们就使用xlrd将读取Excel文件,转换获取json数据

python 复制代码
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

python 复制代码
pip install xlwt

3.2 创建工作簿

python 复制代码
# 导入工具包
import xlwt

# 创建一个工作簿
workbook = xlwt.Workbook(encoding="utf-8")

3.3 创建工作表

python 复制代码
# 创建一个工作表
worksheet = workbook.add_sheet('小马过河')

3.4 往单元格里写入数据

通过行号和列号往Excel表格中写入内容

python 复制代码
# 参数对应 行, 列, 值
worksheet.write(1,0, label = 'hello world!')

最后保存生成(.xls)格式的Excel文件

python 复制代码
# 保存
workbook.save('学习笔记.xls')

3.5 实际应用实例

将从数据库中读取的数据写入到Excel文件中

python 复制代码
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")
相关推荐
4SAPI2 小时前
多模型请求路由怎么设计?成本、速度和能力如何平衡
人工智能·python·gateway·php
FII工业富联科技服务2 小时前
Omniverse 数字孪生与柔性自动化,如何破解产能与交付、设备与空间的双重困境?
运维·自动化·devops
Rock Chin6973 小时前
把 n8n 接进 Slack:在对话里 @机器人 触发自动化工作流
运维·机器人·自动化
XCDoris4 小时前
郴州logo设计机构
大数据·人工智能·python
gCode Teacher 格码致知5 小时前
Pandas教学-17:Series与Dataframe的关系
开发语言·python·pandas
海宇数据5 小时前
零信任架构实战:基于海宇网上踪迹欺诈行为识别构建自动化信贷资信评估网关
运维·人工智能·架构·自动化
zyseo85 小时前
谷歌SEO 准首页词挖掘脚本:找出排在第 8-20 名的隐藏流量
大数据·数据库·人工智能
马良神笔6 小时前
2026 年Rag最近技术前沿总结
后端·python·django
虎鲸不是鱼6 小时前
【虎鲸进化论 30】安全护栏:人类闸门、审计与爆炸半径
人工智能·自动化·大模型·llm·自进化agent
不像程序员的程序媛6 小时前
maven基础
python·pycharm·maven