python如何读取excel表格数据

news2024/12/23 9:52:47

文章目录

    • excel的格式
    • xls格式文件
      • xlrd
      • xlwt
      • excel读取xls类型数据三个方法
    • xlsx格式文件
      • openpyxl

excel的格式

excel有xls和xlsx两种格式,他们的区别在于

  • 文件格式不同:xls是一个特有的二进制格式,其核心结构是符合文档类型的机构,而xlsx的核心结构是xml类型的结构,采用的事基于xml的压缩方式,使其占用的空间更小。xlsx中最后一个x的意义就在于此。
  • 兼容性不同,xlsx格式是向下兼容的,可以兼容xls格式。
  • python自带的模块中有针对xls格式的xlrd和xlwt模块,但是这两个库仅仅针对xls的操作,当我们要操作xlsx格式文件时,则需要使用到openpyxl第三方库
    在这里插入图片描述

xls格式文件

python中对xls格式文件相关的包有三个:xlrd、xlwt和xlutils

  • xlrd只能读取文件,不能写入文件
  • xlwt只能写入文件,不能读取文件
  • xlutils通过.copy.copy方法,将xlrd读取的文件复制给xlwt处理,相当于在xlrd和xlwt之间架起一座桥梁

xlrd

# xls
import xlrd

path='11.xls'
index=0
sheetname='sheet1'
# 打开文件,绝对路径或者相对路径,找不到文件会报错
workbook=xlrd.open_workbook(path)
# 获取文件中所有的sheet对象
sheets=workbook.sheets()
# 获取文件中所有的sheet名称,返回名称列表
names=workbook.sheet_names()
# 获取一个文件中有多少对象
n=workbook.nsheets

# 获取对应索引的对象,索引从0开始
sheet_index=workbook.sheet_by_index(index)
# 获取指定工作表的表名
name=sheet_index.name

# 获取对应名字的对象
sheet_name=workbook.sheet_by_name(sheetname)
print(sheet_name)


# 获取xls的行和列的数量
nrows=sheet_index.nrows
ncols=sheet_index.ncols

# 获取工作表对应行和列的单元格组成的列表
# 元素的格式是 数值类型:对应数据
row_list=sheet_index.row(0)
print(row_list,'\n')
row_list=sheet_index.row(1)
# print(row_list,'\n')
col_list=sheet_index.col(2)
# print(col_list,'\n')


# 取出工作表对应行和列的值组成的列表
row_value=sheet_index.row_values(-1)# 最后一行
print(row_value,"\n")
col_value=sheet_index.col_values(0)

# 输出行和列
row_type=sheet_index.row_types(6)# 数据类型:0.空,1.字符串,2.数字,3.日期,4.布尔,5.error
print(row_type,"\n")
col_type=sheet_index.col_types(1)

# 根据索引值,返回该行的长度,列没有对应操作
len=sheet_index.row_len(1)


# 对单元格进行操作
# 根据行列的索引,返回单元格的数据 数据类型:对应数据
di=sheet_index.cell(0,1)
print(di,"\n")

# 返回单元格的数据
ty=sheet_index.cell_value(0,1)
ty=sheet_index.cell(0,1).value
ty=sheet_index.row(0)[1].value

运行结果

在这里插入图片描述

xlwt

import xlwt

name='sheet1'
new_workbook=xlwt.Workbook('utf-8')
# 在工作簿中添加一个工作表,如果不添加会报错
new_sheet=new_workbook.add_sheet(name)

# 添加内容
row=0
col=0
text='11111'
new_sheet.write(row,col,text)
# 保存
file_path='11.xls'
new_workbook.save(file_path)

excel读取xls类型数据三个方法

可以通过一下方法,对xls数据进行读取、写入和追加写入

import xlrd
import xlwt
from xlutils.copy import copy

# 读取xls格式的文件,读取全部的数据,以最大的行和最大的列来计算
def read_xls_all(url,index):
    '''
    url:文件的路径
    index:第几个工作表,从1开始
    
    返回值:表格中的数据
    '''
    # 打开指定的工作簿
    workbook=xlrd.open_workbook(url)
    # 获取工作簿中所有的表格
    sheets=workbook.sheet_names()# sheets: ['Sheet1', 'Sheet2', 'Sheet3']
    print('sheets:',sheets)
    # 获取index的表格
    worksheet=workbook.sheet_by_name(sheets[index])
    
    datas=[]
    # 遍历每一行数据
    for i in range(0,worksheet.nrows):
        item=[]
        # 遍历每一列数据
        for j in range(0,worksheet.ncols):
            item.append(worksheet.cell_value(i,j))# 可以获取单个数据
        datas.append(item)
    return datas

# 往xls文件写入数据
def write_xls_excel(url,sheet_name,data):
    '''
    data必须是二维表
    '''
    # 创建工作簿对象
    workbook=xlwt.Workbook()
    # 创建一个工作表对象
    sheet=workbook.add_sheet(sheet_name)
    # 遍历每一行数据
    for i in range(0,len(data)):
        for j in range(0,len(data[i])):
            sheet.write(i,j,data[i][j])# 把原来所有的数据都清空,再写入数据
    
    workbook.save(url)
    print('写入成功')
    
# 以追加的形式写入xls
def write_xls_add(url,index,data):
    workbook=xlrd.open_workbook(url)
    sheets=workbook.sheet_names()
    worksheet=workbook.sheet_by_name(sheets[index])
    # 获取行数
    rows=worksheet.nrows
    # 将xlrd对象拷贝转化为xlwt对象
    new_workbook=copy(workbook)
    # 获取转化后工作簿中的第index个表格
    new_worksheet=new_workbook.get_sheet(index)
    # 遍历每一行数据
    for i in range(0,len(data)):
        for j in range(0,len(data[i])):
            # 追加数据
            new_worksheet.write(i+rows,j,data[i][j])
    # 保存工作簿
    new_workbook.save(url)
    print('追加数据成功')

xlsx格式文件

openpyxl

openpyxl不能凭空产生一个表格文件,但是xlwt可以,所以openpyxl需要传入一个excel文件

import openpyxl

# 读取xlsx格式文件
def read_xlsx_excel(url,sheet_name):
    '''
    读取xlsx格式文件
    返回值:表格中的数据
    '''
    # 使用openpyxl加载指定路径的excel文件并得到对应的workbook对象
    workbook=openpyxl.load_workbook(url)
    # 根据指定表名获取表格并得到对应的sheet对象
    sheet=workbook[sheet_name]
    data=[]
    # 遍历表格中的每一行
    for row in sheet.rows:
        da=[]
        for item in row:
            da.append(item.value)
        data.append(da)
    return data

# 写入数据
def write_xlsx_excel(url,sheet_name,data):
    '''
    写入xlsx格式文件
    会创建一个名为sheet_name的对象,把data写入,其他的全部清空
    '''
    # 创建工作簿
    workbook=openpyxl.Workbook()
    # 创建工作表对象
    sheet=workbook.active
    # 设置工作表的名字
    sheet.title=sheet_name
    
    # 遍历数据
    for i in range(0,len(data)):
        for j in range(0,len(data[i])):
            # 写入数据,注意openpyxl的行和列式从1开始的
            sheet.cell(row=i+1,column=j+1,value=data[i][j])
            
    
    # 保存
    workbook.save(url)
    print('写入成功')
    
    
    
# 追加写入xlsx格式文件
def write_xlsx_add(url,sheet_name,datas):
    '''
    追加数据
    '''
    # 使用openpyxl加载指定路径的excel文件并得到对应的workbook对象
    workbook=openpyxl.load_workbook(url)
    # 根据指定表名获取表格并得到对应的sheet对象
    sheet=workbook[sheet_name]
    # 增加一个定位
    sheet['B1']='开始'# 可用于增加表头
    for item in datas:
        sheet.append(item)
    
    # 保存
    workbook.save(url)# 覆盖原来已经存在的文件
    print('追加数据成功')
    
url='example.xlsx'
sheet_name='Sheet2'
data=read_xlsx_excel(url,sheet_name)
print(type(data[0][0]))
print(data)

# write_xlsx_excel(url,'Sheet2',data)
write_xlsx_add(url,sheet_name,data)

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

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

相关文章

5.1 内容管理模块 - 课程预览、提交审核

内容管理模块 - 课程预览、提交审核 文章目录 内容管理模块 - 课程预览、提交审核一、课程预览1.1 需求分析1.2 freemarker 模板引擎1.2.1 Maven 坐标1.2.2 freemaker 相关配置信息1.2.3 添加模板 1.3 测试静态页面1.3.1 部署Nginx1.3.2 解决端口问题被占用问题1.3.3 配置host文…

基于SSM的社区老年人关怀服务系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

关于steam游戏搬砖,想给大家的几点忠告

关于CSGO游戏搬砖,想给大家的几点忠告: 1、新出的箱子,里面开出的皮肤短时间内会溢价,价格虚高,后期会呈逐渐下跌趋势,这就是我们不让大家碰新品的原因,哪怕利润再高也不建议购入或者囤货&…

微笑抑郁症测试

微笑抑郁症属于抑郁症中的一类,微笑和抑郁本是两个对立词汇,但是可以并存且多发于职场精英中,由于工作关系他们必须保持这微信,让他人看到自己最美好的一面,过度压抑内心的情绪,如:工作压力&…

Java开发笔记

一、参数校验 1、校验json字符串是否符合规范 (1)业务场景:接收前端传输过来的json串,需要将其写入数据库,写入之前需要校验其是否能够转换成对应实体类,以便后续从数据库读取   (2&#xff0…

用Pytorch实现线性回归模型

目录 回顾Pytorch实现步骤1. 准备数据2. 设计模型class LinearModel代码 3. 构造损失函数和优化器4. 训练过程5. 输出和测试完整代码 练习 回顾 前面已经学习过线性模型相关的内容,实现线性模型的过程并没有使用到Pytorch。 这节课主要是利用Pytorch实现线性模型。…

什么是TestNG以及如何创建testng.xml文件?

目录 什么是TestNG? 如何创建testng.xml文件 手动创建testng.xml 通过testng.xml运行整个包 通过testng.xml运行类 使用Eclipse创建testng.xml 本文将讨论TestNG以及如何通过执行testng.xml文件在TestNG中运行第一个测试用例。 什么是TestNG? Te…

2.1.2 一个关于y=ax+b的故事

跳转到根目录:知行合一:投资篇 已完成: 1、投资&技术   1.1.1 投资-编程基础-numpy   1.1.2 投资-编程基础-pandas   1.2 金融数据处理   1.3 金融数据可视化 2、投资方法论   2.1.1 预期年化收益率   2.1.2 一个关于yaxb的…

Unity游戏图形学 Shader结构

shader结构 shader语言 openGL:SLG跨平台 >GLSL:openGL shaderlauguge DX:微软开发,性能很好,但是不能跨平台 >HLSL:high level shader language CG:微软和Nvidia公司联合开发&#xff…

2024年腾讯云新用户优惠云服务器价格多少?

腾讯云服务器租用价格表:轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年,540元三年、2核4G5M带宽218元一年,2核4G5M带宽756元三年、轻量4核8G12M服务器446元一年、646元15个月,云服务器CVM S5实例2核2G配置280.8元一年…

统计学-R语言-3

文章目录 前言给直方图增加正态曲线的不恰当之处直方图与条形图的区别核密度图时间序列图洛伦茨曲线计算绘制洛伦茨曲线所需的各百分比数值绘制洛伦茨曲线 练习 前言 本篇文章是介绍对数据的部分图形可视化的图型展现。 给直方图增加正态曲线的不恰当之处 需要注意的是&#…

项目解决方案:多个分厂的视频监控汇聚到总厂

目 录 1、概述 2、建设目标及需求 2.1 建设目标 2.2 需求描述 2.3 需求分析 3. 设计依据与设计原则 3.1 设计依据 3.2设计原则 1、先进性与适用性 2、经济性与实用性 3、可靠性与安全性 4、开放性 5、可扩充性 6、追求最优化的系统设备配置…

【数据结构】C语言实现共享栈

共享栈的C语言实现 导言一、共享栈1.1 共享栈的初始化1.2 共享栈的判空1.3 共享栈的入栈1.3.1 空指针1.3.2 满栈1.3.3 入栈空间错误1.3.4 正常入栈1.3.5 小结 1.4 共享栈的查找1.5 共享栈的出栈1.6 共享栈的销毁 二、共享栈的实现演示结语 导言 大家好,很高兴又和大…

JVM-Arthas高效的监控工具

一、arthas介绍 3.选择监控哪个进程 4.进入具体进程 二、arthas的基础命令与基本操作 1.查询包含Java的系统属性: 命令:sysprop |grep java 1.查询不含Java的系统属性: 命令:sysprop | grep -v java 3.打印历史命令 命令&#…

排序算法之八:计数排序

1.计数排序思想 计数排序,顾名思义就是计算数据的个数 计数排序又称非比较排序 思想:计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用。 操作步骤: 统计相同元素出现次数 根据统计的结果将序列回收到原来的序列中 计数…

20240115如何在线识别俄语字幕?

20240115如何在线识别俄语字幕? 2024/1/15 21:25 百度搜索:俄罗斯语 音频 在线识别 字幕 Bilibili:俄语AI字幕识别 音视频转文字 字幕小工具V1.2 BING:音视频转文字 字幕小工具V1.2 https://www.bilibili.com/video/BV1d34y1F7…

嵌入式软件工程师面试题——2025校招社招通用(十八)

说明: 面试群,群号: 228447240面试题来源于网络书籍,公司题目以及博主原创或修改(题目大部分来源于各种公司);文中很多题目,或许大家直接编译器写完,1分钟就出结果了。但…

sqli-labs关卡23(基于get提交的过滤注释符的联合注入)

文章目录 前言一、回顾前几关知识点二、靶场第二十三关通关思路1、判断注入点2、爆数据库名3、爆数据库表4、爆数据库列5、爆数据库关键信息 总结 前言 此文章只用于学习和反思巩固sql注入知识,禁止用于做非法攻击。注意靶场是可以练习的平台,不能随意去…

SQL-用户管理与用户权限

🎉欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹 ✨博客主页:小小恶斯法克的博客 🎈该系列文章专栏:重拾MySQL 🍹文章作者技术和水平很有限,如果文中出现错误&am…