Python读写EXCEL文件常用方法大全
Posted 荔枝味奶糖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python读写EXCEL文件常用方法大全相关的知识,希望对你有一定的参考价值。
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自动化环境搭建全套项目实战教程
python文件和目录操作方法大全(含实例)
一、python中对文件、文件夹操作时经常用到的os模块和shutil模块常用方法。
1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 2.返回指定目录下的所有文件和目录名:os.listdir() 3.函数用来删除一个文件:os.remove() 4.删除多个目录:os.removedirs(r“c:\python”) 5.检验给出的路径是否是一个文件:os.path.isfile() 6.检验给出的路径是否是一个目录:os.path.isdir() 7.判断是否是绝对路径:os.path.isabs() 8.检验给出的路径是否真地存:os.path.exists() 9.返回一个路径的目录名和文件名:os.path.split() eg os.path.split(‘/home/swaroop/byte/code/poem.txt‘) 结果:(‘/home/swaroop/byte/code‘, ‘poem.txt‘) 10.分离扩展名:os.path.splitext() 11.获取路径名:os.path.dirname() 12.获取文件名:os.path.basename() 13.运行shell命令: os.system() 14.读取和设置环境变量:os.getenv() 与os.putenv() 15.给出当前平台使用的行终止符:os.linesep Windows使用‘\r\n‘,Linux使用‘\n‘而Mac使用‘\r‘ 16.指示你正在使用的平台:os.name 对于Windows,它是‘nt‘,而对于Linux/Unix用户,它是‘posix‘ 17.重命名:os.rename(old, new) 18.创建多级目录:os.makedirs(r“c:\python\test”) 19.创建单个目录:os.mkdir(“test”) 20.获取文件属性:os.stat(file) 21.修改文件权限与时间戳:os.chmod(file) 22.终止当前进程:os.exit() 23.获取文件大小:os.path.getsize(filename)
获得某个路径的父级目录:
parent_path = os.path.dirname(d) #获得d所在的目录,即d的父级目录 parent_path = os.path.dirname(parent_path) ##获得parent_path所在的目录即parent_path的父级目录
获得规范的绝对路径:
abspath = path.abspath(d) #返回d所在目录规范的绝对路径
二、文件操作方法大全:
1.os.mknod("test.txt") #创建空文件
2.fp = open("test.txt",w) #直接打开一个文件,如果文件不存在则创建文件
3.关于open 模式:
a:以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r+:以读写模式打开
w+:以读写模式打开 (参见 w )
a+:以读写模式打开 (参见 a )
rb:以二进制读模式打开
wb:以二进制写模式打开 (参见 w )
ab:以二进制追加模式打开 (参见 a )
rb+:以二进制读写模式打开 (参见 r+ )
wb+:以二进制读写模式打开 (参见 w+ )
ab+:以二进制读写模式打开 (参见 a+ )
fp.read([size]) #size为读取的长度,以byte为单位
fp.readline([size]) #读一行,如果定义了size,有可能返回的只是一行的一部分
fp.readlines([size]) #把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。
fp.write(str) #把str写到文件中,write()并不会在str后加上一个换行符
fp.writelines(seq) #把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入,不会在每行后面加上任何东西。
fp.close() #关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。 如果一个文件在关闭后还对其进行操作会产生ValueError
fp.flush() #把缓冲区的内容写入硬盘
fp.fileno() #返回一个长整型的”文件标签“
fp.isatty() #文件是否是一个终端设备文件(unix系统中的)
fp.tell() #返回文件操作标记的当前位置,以文件的开头为原点
fp.next() #返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。
fp.seek(offset[,whence]) #将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。
fp.truncate([size]) #把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。
三、目录操作方法大全
1.创建目录
os.mkdir("file")
2.复制文件:
shutil.copyfile("oldfile","newfile") #oldfile和newfile都只能是文件
shutil.copy("oldfile","newfile") #oldfile只能是文件夹,newfile可以是文件,也可以是目标目录
3.复制文件夹:
4.shutil.copytree("olddir","newdir") #olddir和newdir都只能是目录,且newdir必须不存在
5.重命名文件(目录)
os.rename("oldname","newname") #文件或目录都是使用这条命令
6.移动文件(目录)
shutil.move("oldpos","newpos")
7.删除文件
os.remove("file")
8.删除目录
os.rmdir("dir") #只能删除空目录
shutil.rmtree("dir") #空目录、有内容的目录都可以删
9.转换目录
os.chdir("path") #换路径
四、文件综合操作实例
将文件夹下所有图片名称加上‘_fc‘
python代码:
import re
import os
import time
#str.split(string)分割字符串
#‘连接符‘.join(list) 将列表组成字符串
def change_name(path):
global i
if not os.path.isdir(path) and not os.path.isfile(path):
return False
if os.path.isfile(path):
file_path = os.path.split(path) #分割出目录与文件
lists = file_path[1].split(‘.‘) #分割出文件与文件扩展名
file_ext = lists[-1] #取出后缀名(列表切片操作)
img_ext = [‘bmp‘,‘jpeg‘,‘gif‘,‘psd‘,‘png‘,‘jpg‘]
if file_ext in img_ext:
os.rename(path,file_path[0]+‘/‘+lists[0]+‘_fc.‘+file_ext)
i+=1 #注意这里的i是一个陷阱
#或者
#img_ext = ‘bmp|jpeg|gif|psd|png|jpg‘
#if file_ext in img_ext:
# print(‘ok---‘+file_ext)
elif os.path.isdir(path):
for x in os.listdir(path):
change_name(os.path.join(path,x)) #os.path.join()在路径处理上很有用
img_dir = ‘D:\\xx\\xx\\images‘
img_dir = img_dir.replace(‘\\‘,‘/‘)
start = time.time()
i = 0
change_name(img_dir)
c = time.time() - start
print(‘程序运行耗时:%0.2f‘%(c))
print(‘总共处理了 %s 张图片‘%(i))
输出结果:
总共处理了 109 张图片
以上是关于Python读写EXCEL文件常用方法大全的主要内容,如果未能解决你的问题,请参考以下文章