Python读写Excel表格,就是这么简单粗暴又好用

2023-05-16

点击上方“程序人生”,选择“置顶公众号”

第一时间关注程序猿(媛)身边的故事


640?wx_fmt=jpeg

图片源自unsplash

作者

丁彦军

如需转载,请联系原作者授权。


最近在做一些数据处理和计算的工作,因为数据是以.csv格式保存的,因此刚开始直接用Excel来处理。但是做着做着发现重复的劳动其实并没有多大的意义,于是就想着写个小工具帮着处理。以前正好在一本书上看到过使用Python来处理Excel表格,可惜没有仔细看。于是我到处查找资料,基本解决了日常所需,终于算是完成了任务,因此撰写此文就算是总结吧,主要记录使用过程的常见问题及解决。


python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库。可从这里下载https://pypi.python.org/pypi。下面分别记录python读和写excel。


Python写excel——xlwt

Python写excel的难点不在构造一个workbook的本身,而是填充的数据,不过这不在范围内。在写excel的操作中也有棘手的问题,比如写入合并的单元格就是比较麻烦的,另外写入还有不同的样式。

详细代码如下:


  

  

import xlwt


#设置表格样式

def set_style(name,height,bold=False):

style = xlwt.XFStyle()

font = xlwt.Font()

font.name = name

font.bold = bold

font.color_index = 4

font.height = height

style.font = font

return style


#写Excel

def write_excel():

f = xlwt.Workbook()

sheet1 = f.add_sheet('学生',cell_overwrite_ok=True)

row0 = ["姓名","年龄","出生日期","爱好"]

colum0 = ["张三","李四","恋习Python","小明","小红","无名"]

#写第一行

for i in range(0,len(row0)):

sheet1.write(0,i,row0[i],set_style('Times New Roman',220,True))

#写第一列

for i in range(0,len(colum0)):

sheet1.write(i+1,0,colum0[i],set_style('Times New Roman',220,True))


sheet1.write(1,3,'2006/12/12')

sheet1.write_merge(6,6,1,3,'未知')#合并行单元格

sheet1.write_merge(1,2,3,3,'打游戏')#合并列单元格

sheet1.write_merge(4,5,3,3,'打篮球')


f.save('test.xls')


if __name__ == '__main__':

write_excel()


结果图:

640?wx_fmt=png


在此,对write_merge()的用法稍作解释,如上述:sheet1.write_merge(1,2,3,3,'打游戏'),即在四列合并第2,3列,合并后的单元格内容为"合计",并设置了style。其中,里面所有的参数都是以0开始计算的。


Python读excel——xlrd

Python读取Excel表格,相比xlwt来说,xlrd提供的接口比较多,但过程也有几个比较麻烦的问题,比如读取日期、读合并单元格内容。

下面先看看基本的操作:


640?wx_fmt=png

图表数据

整体思路为,打开文件,选定表格,读取行列内容,读取表格内数据

详细代码如下:


  

  

import xlrd

from datetime import date,datetime


file = 'test3.xlsx'


def read_excel():


wb = xlrd.open_workbook(filename=file)#打开文件

print(wb.sheet_names())#获取所有表格名字


sheet1 = wb.sheet_by_index(0)#通过索引获取表格

sheet2 = wb.sheet_by_name('年级')#通过名字获取表格

print(sheet1,sheet2)

print(sheet1.name,sheet1.nrows,sheet1.ncols)


rows = sheet1.row_values(2)#获取行内容

cols = sheet1.col_values(3)#获取列内容

print(rows)

print(cols)


print(sheet1.cell(1,0).value)#获取表格里的内容,三种方式

print(sheet1.cell_value(1,0))

print(sheet1.row(1)[0].value)


运行结果如下:

640?wx_fmt=png


那么问题来了,上面的运行结果中红框框中的字段明明是出生日期,可显示的确实浮点数;同时合并单元格里面应该是有内容的,结果不能为空。


别急,我们来一一解决这两个问题:


1.python读取excel中单元格内容为日期的方式


python读取excel中单元格的内容返回的有5种类型,即上面例子中的ctype:

ctype :  0 empty,1 string,2 number, 3 date,4 boolean,5 error

即date的ctype=3,这时需要使用xlrd的xldate_as_tuple来处理为date格式,先判断表格的ctype=3时xldate才能开始操作。



详细代码如下:


  

  

import xlrd

from datetime import date,datetime


print(sheet1.cell(1,2).ctype)

date_value = xlrd.xldate_as_tuple(sheet1.cell_value(1,2),wb.datemode)

print(date_value)

print(date(*date_value[:3]))

print(date(*date_value[:3]).strftime('%Y/%m/%d'))


640?wx_fmt=png


2.获取合并单元格的内容


在操作之前,先介绍一下merged_cells()用法,merged_cells返回的这四个参数的含义是:(row,row_range,col,col_range),其中[row,row_range)包括row,不包括row_range,col也是一样,即(1, 3, 4, 5)的含义是:第1到2行(不包括3)合并,(7, 8, 2, 5)的含义是:第2到4列合并。


详细代码如下:


  

  

print(sheet1.merged_cells)
print(sheet1.cell_value(1,3))

print(sheet1.cell_value(4,3))

print(sheet1.cell_value(6,1))


640?wx_fmt=png


发现规律了没?是的,获取merge_cells返回的row和col低位的索引即可! 于是可以这样批量获取:


详细代码如下:


  

  

merge = []

print(sheet1.merged_cells)

for (rlow,rhigh,clow,chigh) in sheet1.merged_cells:

merge.append([rlow,clow])

for index in merge:

print(sheet1.cell_value(index[0],index[1]))


运行结果跟上图一样,如下:

640?wx_fmt=png

Python读写Excel表格,就是这么简单粗暴又好用,如果觉得不错,对你工作中有帮助,动动手指分享给更多人哦。


- The End -

「若你有原创文章想与大家分享,欢迎投稿。」

加编辑微信ID,备注#投稿#:

程序 丨 druidlost  

小七 丨 duoshangshuang

程序人生有个交流群 欢迎大家扫码进群 一起交流编程日常所关心的各类话题

640?wx_fmt=jpeg

若二维码失效,请加编辑微信ID,备注#北京#:

程序 丨 druidlost  

小七 丨 duoshangshuang

更多精彩内容

640?wx_fmt=png

640?wx_fmt=gif

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python读写Excel表格,就是这么简单粗暴又好用 的相关文章

  • 我的三种时间对齐方法

    要对齐一段时间内两组时间密度不一样的数据 xff0c S组是4000个时间节点 xff0c G组是20000多个时间节点 xff0c 这里展示了三种方法 xff1a 1 快速扫描算法 xff0c 设置时间精度为0 005s xff0c n的
  • postman后置脚本编写

    参数关联 xff1a 上一个接口返回token xff0c 如何传到下个接口中 xff1f 则需要写后置脚本来获取 1 打开登录接口 xff0c 在Tests区域编写javasscript脚本解析返回response对象 xff0c 从js
  • vscode代码拉取、提交

  • Docker“Got permission denied while trying to connect to the Docker daemon socket“

    问题 我在进行docker pull bestwu qq操作的时候报了错误 xff1a Got permission denied while trying to connect to the Docker daemon socket at
  • USB接口如何检测到设备的插入

    当插座上没有接设备时 xff0c D 43 和D 被15K的电阻下拉到低电平 xff0c 当有设备接入时 xff0c 例如一个U盘设备插入usb接口 xff0c vbus如果是3 3V xff0c 那么对于D 43 的点平则是一个高电平 x
  • 1.gazebo启动与界面介绍

    gazebo启动与界面介绍 1 启动gazebo ubuntu环境下使用ctrl 43 alt 43 t快捷键打开命令行 xff0c 在命令行中直接输入gazebo即可启动gazebo 2 界面介绍 看图 参考官网介绍
  • 程序媛有话说丨35岁的我是如何成功转型,给职场迷茫的师兄师姐师弟师妹

    点击上方 程序人生 xff0c 选择 置顶公众号 第一时间关注程序猿 xff08 媛 xff09 身边的故事 我 82 年出生在中国的一个二线城市 xff0c 毕业于一个三流大学的计算机专业 父母都是国有企业的一般职工 xff0c 没有什么
  • AI时代的思维方式

    2017年5月23日 xff0c 百度联盟大会在重庆召开 xff0c 李彦宏发表演讲 xff0c 阐释AI 时代的思维方式 xff1a 手机还会长期存在 但移动的机会不多了 From think Mobile to think AI 软硬结
  • dubbo超时重试和异常处理

    dubbo超时重试和异常处理 参考 xff1a https www cnblogs com ASPNET2008 p 7292472 html https www tuicool com articles YfA3Ub https www
  • 语音信号的短时傅里叶分析

    语音信号的短时傅里叶分析 文章目录 语音信号的短时傅里叶分析概述短时傅里叶变换短时傅里叶的取样率时域取样率频域取样率总取样率 语音信号的短时综合滤波器组求和法快速傅里叶变换求和法 语谱图宽带语谱图的典型谱型窄带语谱图的典型谱型窄带语谱图的典
  • 5分钟教你搞定一个超详细超简单的图形化界面(Java图形化界面设计之容器(JFrame))

    第一步 xff1a 创建一个maven项目 第二步 xff1a pom xml文件导入相关依赖 第三步 xff1a 写代码啦 xff0c 写完后直接运行即可 第四步 xff1a 程序运行起来啦 第一步 xff1a 创建一个maven项目 第
  • openMP使用

    openMP使用 项目需要对程序的运行进行加速 xff0c 在不考虑更换硬件的前提下 xff0c 考虑采用多线程对代码进行优化 xff0c 以下记录学习过程 处理器采用大疆秒算2 C xff0c CMakeList配置参考这篇博客 xff1
  • VSCode git工具

    之前都是老老实实用命令行敲命令 xff0c 其实VSCode自带得git工具已经非常方便 命令行提交代码 首先先介绍之前在命令行 ubuntu终端 xff0c windows git bash here 操作 xff1a 工程路径下 xff
  • vscode给docker内部的的ros工程代码打断点

    背景 打断点debug虽然不能直观看到变量在时间轴上的整体变化曲线 xff0c 但是其针对某一帧问题数据 xff0c 暂停后一步步单步执行监视每个变量的变化 xff0c 方便直观的判断每一步逻辑的正确性 xff0c 即使这个变量结构再复杂也
  • js中onclick()获取当前点击对象的属性值

    HTML span class token operator lt span a type span class token operator 61 span span class token single quoted string st
  • layui上传文件loading加载动画

    jquery layui 开始请求打开layui加载动画 所有请求结束后关闭layui加载动画 ajaxSetup 方法为将来的 AJAX 请求设置默认值 ajax请求中有一个beforeSend方法 xff0c 用于在向服务器发送请求前执
  • 微信小程序事件bindtap实现页面跳转

    index wxml通过bindtap 61 34 getUrl 34 设置一个名为getUrl事件 lt view class 61 34 tab con 34 gt lt view class 61 34 newsinfo 34 bin
  • 程序员找工作的个人经验教训以及注意事项

    点击上方 程序人生 xff0c 选择 置顶公众号 第一时间关注程序猿 xff08 媛 xff09 身边的故事 忽然间想到如果要找工作的话 xff0c 需要注意一些什么问题 没毕业的 xff0c 刚刚毕业的 xff0c 刚刚工作的都可以借鉴一
  • JavaScript逻辑运算与或非

    逻辑运算 amp amp 与 或 非 javascript中的逻辑运算两边的操作数 xff0c 可以是任意类型的任意值 默认布尔值 xff1a 当参与逻辑运算或判断语句中时 xff0c 任意类型的任意值都有一个默认的布尔型的值 与运算 xf
  • PHP面试题

    PHP知识 php反转字符串的三种方法 1 把分割字符串到一个数组中 xff0c 然后遍历拼接 xff1a lt php function joinStrrev str if strlen str lt 61 1 return str ne

随机推荐

  • tp6实现商城后台登录功能

    后台登录逻辑 1 没有登录状态 xff0c 访问后台页面都应该跳转到登录页 已经登录状态 xff1a 1 访问登录页面 xff0c 应该跳转到后台首页 解决方案 xff1a 后台登录拦截 xff1a 1 传统common base php控
  • Jenkins环境部署

    简介 Jenkins是一款开源 CI amp CD 软件 xff0c 用于自动化各种任务 xff0c 包括构建 测试和部署软件 Jenkins 支持各种运行方式 xff0c 可通过系统包 Docker 或者通过一个独立的 Java 程序 J
  • Nginx中Return指令使用

    Return指令使用 1 返回状态码 return 404 location test set name 39 user123 39 return 404 name curl i http 192 168 56 10 test 2 返回字符
  • MySQL触发器

    介绍 触发器是与表有关的数据库对象 xff0c 指在 insert update delete 之前或之后 xff0c 触发并执行触发器中定义的SQL语句集合 触发器的这种特性可以协助应用在数据库端确保数据的完整性 日志记录 数据校验等操作
  • 制作composer包提供sdk扩展

    目录 1 初始化包 2 将代码推送到github远程仓库 3 为写好扩展包打上tag标签标记当前代码版本 4 将包发布到包管理平台 初始化包 xff0c 生成 Creates a basic composer json file in cu
  • Go环境搭建与IDE开发工具配置

    安装Go语言编译器 Go语言编译器 61 编译器 61 将源代码编译为可执行程序 61 源代码 61 程序员使用高级语言所书写的代码文件 61 高级语言 61 c c 43 43 go 61 机器语言 61 0和1构成 xff0c 机器能直
  • 计算机中的速率、带宽、时延、利用率解读

    计算机网络的性能一般是指它的几个重要的性能指标 但除了这些重要的性能指标外 xff0c 还有一些非性能特征 xff08 nonperformance characteristics xff09 也对计算机网络的性能有很大的影响 那么 xff
  • 无人机原理

    文章目录 1基本运动2为何无人机螺旋桨多为偶数3机器人的运动控制4加速度计5陀螺仪6姿态角解算欧拉角的平面换算 1基本运动 为了平衡扭矩 xff0c 上图中1 3逆时针转动 xff0c 电机2 4顺时针转动进行反扭矩对消 上升 F1 61
  • 新浪微博PC端模拟登陆

    点击上方 程序人生 xff0c 选择 置顶公众号 第一时间关注程序猿 xff08 媛 xff09 身边的故事 图 xff1a Fantastic Beasts and Where to Find Them 投稿 星星在线 简介 一个从妹子图
  • win10下 docker build 报错 “Failed to fetch xxxxxxxx Temporary failure resolving 'archive.ubuntu.com'”

    错误信息 在docker中搭建禅道的时候执行docker build t zentao 命令后执行到apt get update amp amp apt get install指令的时候报错 xff0c 错误如下 xff1a W Faile
  • docker-ros-gui

    主机环境 系统 Ubuntu 16 04 1 安装docker 1 1 在线安装 物理机 默认使用当前最新版本 1 更新apt包索引 xff1a sudo apt get update 2 安装以下包以使apt可以通过HTTPS使用存储库
  • halcon opencv 图像处理面试指南

    珠海某上市公司算法总监 xff1a 1 相机标定的原理与坐标系之间的转换 xff0c 如何转换 2 激光三角原理 xff0c 如何搭建 3 测量拟合的过程中有哪些算子 xff0c 原理什么 xff0c 接着问5 xff0c 跌代多少次 xf
  • 【3D计算机视觉】从PointNet到PointNet++理论及pytorch代码

    从PointNet到PointNet 43 43 理论及代码详解 1 点云是什么1 1 三维数据的表现形式1 2 为什么使用点云1 3 点云上以往的相关工作 2 PointNet2 1 基于点云的置换不变性2 1 1 由对称函数到Point
  • 在ubuntu上安装mavlink-router

    版本说明 xff1a ubuntu 20 0 04 mavlink router 2 为了安装mavlink router 需要预先安装一些依赖库 xff1a autoconf libtool python future python3 f
  • PX4多机仿真(gazebo)

    版本说明 xff1a 操作系统 宿主机 xff08 或开发机 xff09 xff1a ubuntu server 20 0 04 thinkpad 目标机 xff08 机载计算机 xff09 xff1a ubuntu server 20 0
  • 为PX4建立J-Link Eclipse交叉调试环境

    版本说明 1 自驾仪 xff1a Holybro的Pixhawk 4 2 PX4版本 xff1a 1 12 3 宿主机 xff1a Thinkpad笔记本 43 Ubuntu 20 04 2 LTS 4 Eclipse xff1a 2022
  • 为Ubuntu增加swap空间并调整性能

    版本说明 xff1a Raspberry Pi 3B 43 Ubuntu 20 04 server 本文参考翻译自这篇文章 SWAP文件的设置 Swap是硬盘存储的一部分 xff0c 它被预留给操作系统 当RAM中不再有足够的空间来保存正在
  • PX4的中间件Fast DDS

    本文参考官网 xff1a RTPS DDS Interface PX4 Fast RTPS DDS Bridge PX4 User Guide 版本说明 xff1a PX4固件版本 xff1a 1 13 0d 自驾仪 xff1a PIXHA
  • 为PX4建立ROS2环境,x86与树梅派

    本文参考官网 xff1a a href https docs px4 io master en ros ros2 comm html title htt htt a ps docs px4 io master en ros ros2 com
  • Python读写Excel表格,就是这么简单粗暴又好用

    点击上方 程序人生 xff0c 选择 置顶公众号 第一时间关注程序猿 xff08 媛 xff09 身边的故事 图片源自unsplash 作者 丁彦军 如需转载 xff0c 请联系原作者授权 最近在做一些数据处理和计算的工作 xff0c 因为