Python读写EXCEL文件常用方法

news2024/11/24 17:39:35

python读写excel的方式有很多,不同的模块在读写的讲法上稍有区别,这里我主要介绍几个常用的方式。

  • 用xlrd和xlwt进行excel读写;
  • 用openpyxl进行excel读写;
  • 用pandas进行excel读写;

一、数据准备

为了方便演示,我这里新建了一个data.xls和data.xlsx文件,第一个工作表sheet1区域“A1:E5”的内容如下,用于测试读写excel的代码:

二、0xlrd和xlwt

xlrd是一个库,用于从Excel文件中以.xls格式读取数据和格式化信息
xlwt是一个库,用于将数据和格式化信息写入较旧的Excel文件(例如:.xls)。

1示例

pip install xlrd
pip install xlwt

我们开始来读取文件的内容

import xlrd
import os
file_path = os.path.dirname(os.path.abspath(__file__))
base_path = os.path.join(file_path, 'data.xlsx')
book = xlrd.open_workbook(base_path)
sheet1 = book.sheets()[0]
nrows = sheet1.nrows
print('表格总行数', nrows)
ncols = sheet1.ncols
print('表格总列数', ncols)
row3_values = sheet1.row_values(2)
print('第3行值', row3_values)
col3_values = sheet1.col_values(2)
print('第3列值', col3_values)
cell_3_3 = sheet1.cell(2, 2).value
print('第3行第3列的单元格的值:', cell_3_3)

接下来我们来进行写入,写入可以进行的操作太多了,我这里只列举了常用的的操作。

import xlwt
import datetime
# 创建一个workbook 设置编码
workbook = xlwt.Workbook(encoding='utf-8')
# 创建一个worksheet
worksheet = workbook.add_sheet('Worksheet')
# 写入excel参数对应 行, 列, 值
worksheet.write(0, 0, label='测试')
# 设置单元格宽度
worksheet.col(0).width = 3333
# 设置单元格高度
tall_style = xlwt.easyxf('font:height 520;')
worksheet.row(0).set_style(tall_style)
# 设置对齐方式
alignment = xlwt.Alignment() # Create Alignment
# May be: HORZ_GENERAL, HORZ_LEFT, HORZ_CENTER, HORZ_RIGHT, HORZ_FILLED, HORZ_JUSTIFIED, HORZ_CENTER_ACROSS_SEL, HORZ_DISTRIBUTED
alignment.horz = xlwt.Alignment.HORZ_CENTER
# May be: VERT_TOP, VERT_CENTER, VERT_BOTTOM, VERT_JUSTIFIED, VERT_DISTRIBUTED
alignment.vert = xlwt.Alignment.VERT_CENTER
style = xlwt.XFStyle() # Create Style
style.alignment = alignment # Add Alignment to Style
worksheet.write(2, 0, '居中', style)
# 写入带颜色背景的数据
pattern = xlwt.Pattern() # Create the Pattern
# May be: NO_PATTERN, SOLID_PATTERN, or 0x00 through 0x12
pattern.pattern = xlwt.Pattern.SOLID_PATTERN
pattern.pattern_fore_colour = 5 # May be: 8 through 63. 0 = Black, 1 = White, 2 = Red, 3 = Green, 4 = Blue, 5 = Yellow, 6 = Magenta, 7 = Cyan, 16 = Maroon, 17 = Dark Green, 18 = Dark Blue, 19 = Dark Yellow , almost brown), 20 = Dark Magenta, 21 = Teal, 22 = Light Gray, 23 = Dark Gray, the list goes on...
style = xlwt.XFStyle() # Create the Pattern
style.pattern = pattern # Add Pattern to Style
worksheet.write(0, 1, '颜色', style)
# 写入日期
style = xlwt.XFStyle()
# Other options: D-MMM-YY, D-MMM, MMM-YY, h:mm, h:mm:ss, h:mm, h:mm:ss, M/D/YY h:mm, mm:ss, [h]:mm:ss, mm:ss.0
style.num_format_str = 'M/D/YY'
worksheet.write(0, 2, datetime.datetime.now(), style)
# 写入公式
worksheet.write(0, 3, 5) # Outputs 5
worksheet.write(0, 4, 2) # Outputs 2
# Should output "10" (A1[5] * A2[2])
worksheet.write(1, 3, xlwt.Formula('D1*E1'))
# Should output "7" (A1[5] + A2[2])
worksheet.write(1, 4, xlwt.Formula('SUM(D1,E1)'))
# 写入超链接
worksheet.write(1, 0, xlwt.Formula('HYPERLINK("http://www.baidu.com";"百度一下")'))
# 保存
workbook.save('Excel_test.xls')

需要注意的是最好在当前路径下通过命令行执行,否则无法生成文件。

三、0openpyxl

openpyxl是一个Python库,用于读取/写入Excel 2010 xlsx/xlsm/xltx/xltm文件。
安装包

pip install openpyx

安装完成可以开始进行读取数据

import openpyxl
import os
file_path = os.path.dirname(os.path.abspath(__file__))
base_path = os.path.join(file_path, 'data.xlsx')
workbook = openpyxl.load_workbook(base_path)
worksheet = workbook.get_sheet_by_name('Sheet1')
row3=[item.value for item in list(worksheet.rows)[2]]
print('第3行值',row3)
col3=[item.value for item in list(worksheet.columns)[2]]
print('第3行值',col3)
cell_2_3=worksheet.cell(row=2,column=3).value
print('第2行第3列值',cell_2_3)
max_row=worksheet.max_row
print('最大行',max_row)

现在我们来开始写入数据

import openpyxl
import datetime
from openpyxl.styles import Font, colors, Alignment
#实例化
workbook = openpyxl.Workbook()
# 激活 worksheet
sheet=workbook.active
#写入数据
sheet['A1']='python'
sheet['B1']='javascript'
#写入时间
sheet['A2'] = datetime.datetime.now().strftime("%Y-%m-%d")
# 第2行行高
sheet.row_dimensions[2].height = 40
# B列列宽
sheet.column_dimensions['B'].width = 30
# 设置A1中的数据垂直居中和水平居中
sheet['A1'].alignment = Alignment(horizontal='center', vertical='center')
# 下面的代码指定了等线24号,加粗斜体,字体颜色黄色。直接使用cell的font属性,将Font对象赋值给它。
bold_itatic_24_font = Font(name='等线', size=24, italic=True, color='00FFBB00', bold=True)
sheet['B1'].font = bold_itatic_24_font
# 合并单元格, 往左上角写入数据即可
sheet.merge_cells('A2:B2') # 合并一行中的几个单元格
# 拆分单元格
# sheet.unmerge_cells('A2:B2')
#保存
workbook.save('new.xlsx')

四、0pandas

pandas支持xls, xlsx, xlsm, xlsb, odf, ods和odt文件扩展名从本地文件系统或URL读取。支持读取单个工作表或工作表列表的选项。
首先依然是安装包

pip install pandas

语法:
pd.read_excel(io, sheet_name=0, header=0, names=None, index_col=None, usecols=None, squeeze=False,dtype=None, engine=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None, parse_dates=False, date_parser=None, thousands=None, comment=None, skipfooter=0, convert_float=True, **kwds)

  • io,Excel的存储路径
  • sheet_name,要读取的工作表名称
  • header, 用哪一行作列名
  • names, 自定义最终的列名
  • index_col, 用作索引的列
  • usecols,需要读取哪些列
  • squeeze,当数据仅包含一列
  • converters ,强制规定列数据类型
  • skiprows,跳过特定行
  • nrows ,需要读取的行数
  • skipfooter , 跳过末尾n行
import pandas as pd
import os
file_path = os.path.dirname(os.path.abspath(__file__))
base_path = os.path.join(file_path, 'data.xlsx')
df = pd.read_excel(base_path)
print(df)

写入数据
语法:
DataFrame.to_excel(excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep='inf', verbose=True, freeze_panes=None)
参数说明:

  • excel_writer:文件路径或现有的ExcelWriter
  • sheet_name:将包含数据文件的工作表的名称
  • na_rep:缺失的数据表示
  • float_format:格式化浮点数的字符串。例如float_format = " %。2f"格式为0.1234到0.12。
  • columns:列
  • header:写出列名。如果给定一个字符串列表,则假定它是列名的别名。
  • index:写入行名称(索引)
  • index_label:如果需要,索引列的列标签。如果未指定,并且标头和索引为真,则使用索引名。如果DataFrame使用多索引,应该给出一个序列。
  • startrow:左上角的单元格行转储数据帧。
  • startcol:左上角单元格列转储数据帧。
  • engine:编写要使用的引擎“ openpyxl”或“ xlsxwriter”。 您还可以通过选项io.excel.xlsx.writer,io.excel.xls.writer和io.excel.xlsm.writer进行设置。
  • merge_cells:将多索引和层次结构行写入合并单元格。
  • encoding:对生成的excel文件进行编码。仅对xlwt有必要,其他编写器本身支持unicode。
  • inf_rep:表示无穷大。
  • verbose:在错误日志中显示更多信息。
  • freeze_panes:指定要冻结的最底部的行和最右边的列
from pandas import DataFrame
data = {'name': ['张三', '李四', '王五'],'age': [11, 12, 13],'sex': ['男', '女', '男']}
df = DataFrame(data)
df.to_excel('file.xlsx')

2023最新Web自动化测试,Python+Selenium自动化环境搭建全套项目实战教程

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

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

相关文章

在滴滴和字节干了4年测试开发,简直不要太真实…

先简单交代一下,某不知名211的本硕,18年毕业加入滴滴,之后跳槽到了头条,一直从事测试开发相关的工作。之前没有实习经历,算是四年的工作经验吧。 这四年之间完成了一次晋升,换了一家公司,有过开…

Linux环境下Mysql8的下载、安装、主从模式搭建

主库部署 下载 下载地址:MySQL :: Download MySQL Community Server (Archived Versions) 文件名称:mysql-8.0.17-linux-glibc2.12-x86_64.tar.xz 解压 先解压xz xz -d mysql-8.0.17-linux-glibc2.12-x86_64.tar.xz 再解压tar tar -xvf mysql-8.0.17-linux-glibc2.12-…

QT 5.14 和 VS2017脱机离线安装记录

QT 5.14是最后的离线安装版本,都推荐这个。看了下,官方建议搭配 VS2017/VS2015 VS版本对于QT,我一直偏好社区版,只要编译器就够了,自己加上SDK目录。因为大部分工作都是在QT内完成。VS2017的离线安装比较复杂&#xff…

区间预测 | MATLAB实现基于QRCNN-BiLSTM卷积神经网络结合双向长短期记忆神经网络多变量时间序列区间预测

区间预测 | MATLAB实现QRCNN-BiLSTM卷积神经网络结合双向长短期记忆神经网络多变量时间序列区间预测 目录 区间预测 | MATLAB实现QRCNN-BiLSTM卷积神经网络结合双向长短期记忆神经网络多变量时间序列区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 1.Mat…

Android 14 之返回界面升级:预览目标界面 + 全新返回箭头

Android 13 的版本里 Android 就针对返回导航进行了大量更改,包括: 废弃原有的 KEYCODE_BACK KeyEvent提供 Manifest 属性 enableOnBackInvokedCallback 以配置是否应用全新的 Back 导航特性提供 Activity、Dialog 里处理 Back 导航的 OnBackInvokedDis…

Zabbix自定义redis6集群监控项并用python脚本自动创建应用集、监控项、触发器

1.1、编写redis_status.sh脚本 [fieldyangcentos7-135 sbin]$ mkdir -p /usr/lib/zabbix/scripts/ [fieldyangcentos7-135 sbin]$ cd /usr/lib/zabbix/scripts/ [fieldyangcentos7-135 scripts]$ cat >redis_status.sh #!/bin/bash #author:Fieldyang #descr…

day 48 打家劫舍专题:198. 打家劫舍;213. 打家劫舍 II;337. 打家劫舍 III

打家劫舍 198. 打家劫舍1. dp数组以及下标名义2. 递归公式3. dp数组如何初始化4. 遍历顺序5. 代码 213. 打家劫舍 II:房间首尾相连1. dp数组以及下标名义2. 递归公式3. dp数组如何初始化4. 遍历顺序5. 代码 337. 打家劫舍 III:1. 递归,后序遍历动态规划:…

路径规划算法:基于热交换优化的路径规划算法- 附代码

路径规划算法:基于热交换优化的路径规划算法- 附代码 文章目录 路径规划算法:基于热交换优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化算法…

HTTP编码杂谈

一 HTTP编码杂谈 ① 知识铺垫 1) 编码的英文叫encode --> 常见HTTP URL编码、Base64编码等目的: 转变为二进制的stream(字节流),便于网络传输备注: 一般都是基于utf-8编码2) 解码叫decode3) 乱码的根源: 编码和解码的方式不一致4) url…

深入理解深度学习——切面距离(Tangent Distance)、正切传播(Tangent Prop)和流形正切分类器

分类目录:《自然语言处理从入门到应用》总目录 许多机器学习通过假设数据位于低维流形附近来克服维数灾难。一个利用流形假设的早期尝试是切面距离(Tangent Distance)算法 (Simard。它是一种非参数的最近邻算法,其中使用的度量不是…

libVLC 抓取视频帧并渲染(OpenGL)

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 在前面,我们写了几篇文章《libVLC 抓取视频帧并渲染(QWidget)》和《libVLC 抓取视频帧并渲染(QGraphicsView)》,分别介绍了QWidget 和 QGraphicsView 对视频帧的渲染,除了这些方式之外,还有一种最常…

动,静态库(与linux有关)

1.一些与本章标题无关的补充内容 当我们修改文件内容的时候,有可能会修改文件的属性。比如:可能会更改文件的大小属性。 我们在通过指令查看文件的时间相关属性时会往往观察到这样的现象:Access(访问时间,之前有具体讲过)没有及…

C++ string的简单应用

C语言的字符串 C的字符串 头文件&#xff1a; #include<string.h> //c #include<string> //C #include<cstring> //C 比较string的大小 两个string对象相加 使用字符串对象来存放字符串 两个string对象相加 string str "Hello,"; st…

求取平面参数

平面方程AXBYCZD0 变换一下-> A/DX B/DYC/DZ -1 该方程满足Axb 其中A为, x为,b为-1单位阵 求解代码如下: /* comment plane equation: Ax By Cz D 0 convert to: A/D*x B/D*y C/D*z -1 solve: A0*x0 b0 where A0_i [x_i, y_i, z_i], x0 [A/D, B/D, C/D]^T,…

逆向汇编与反汇编——基本数据类型

-1&#xff1a;0xFFFFFFFF 为什么内存使用补码来存储数据&#xff1f; 》因为CPU的设计只有加法器&#xff0c;没有减法&#xff0c;需要使用补码来实现减法 大端&#xff1a;数值的高位放到内存的低字节 小端模式验证&#xff1a;78 78 浮点型&#xff1a;单精度float和双精…

创建类构造器

类的创建 构造器 作用&#xff1a;给类赋值 类实际可分为&#xff1a;构造器属性方法 构造器的重载 重载&#xff1a;方法名相同&#xff0c;参数类型不同 一定要有空构造器&#xff01;&#xff01;&#xff01; TIP&#xff1a;this.指代当前创建对象

数据结构与算法系列之希尔排序

&#x1f497; &#x1f497; 博客:小怡同学 &#x1f497; &#x1f497; 个人简介:编程小萌新 &#x1f497; &#x1f497; 如果博客对大家有用的话&#xff0c;请点赞关注再收藏 &#x1f31e; 希尔排序 希尔排序法又称缩小增量法。希尔排序法的基本思想是&#xff1a;先选…

Python读写mat文件(使用scipy.io)

在matlab中&#xff0c;数据可保存为mat文件&#xff0c;使用save和load命令可进行读写操作。而在Python中&#xff0c;也可以对mat文件进行读写。 一、由matlab向Python传数据&#xff08;Python读取mat文件&#xff09; 第一步&#xff1a;使用matlab创建变量并保存至mat文…

某程序员——我应届毕业,年薪23万...

马士兵教育线下训练营第1期 已经圆满结束啦~ 不了解训练营的伙伴 有的在观望、有的在好奇 训练营真的能学到东西吗&#xff1f; 出去了之后能找到工作吗&#xff1f; 不如看看那些参加过的人是怎么说的 或许&#xff0c;你会对我们、对训练营 会有更深入的了解...... 0…

计算机视觉:转置卷积

转置卷积 文章目录 转置卷积基本操作填充、步幅和多通道性质 转置卷积&#xff08;Transposed Convolution&#xff09;&#xff0c;也称为反卷积&#xff08;Deconvolution&#xff09;&#xff0c;是卷积神经网络&#xff08;CNN&#xff09;中的一种操作&#xff0c;它可以将…