Python处理Excel:xlrd、xlwt与openpyxl模块对比及实操指南
本文详细对比Python中处理Excel的三大模块:xlrd、xlwt和openpyxl。分析显示,面对大文件时xlrd/xlwt读写速度明显优于openpyxl,但xlwt不支持生成xlsx格式。推荐策略为使用xlrd读取、openpyxl写入以兼顾效率与格式。文章提供了各模块获取工作簿、工作表、行列数据及单元格值的完整代码示例与注意事项。
在Python生态中,处理Excel文件主要依赖xlrd、xlwt和openpyxl这三个模块。它们各自支持的文件格式不同,且在读写效率上存在显著差异。
各模块的核心区别在于对Excel文件格式的支持范围。xlrd支持读取xls和xlsx格式;xlwt仅支持写入xls格式,无法生成xlsx;openpyxl则专注于xlsx格式的读写,不支持xls。
| 模块 | Excel格式支持 | |
| xls | xlsx | |
| xlrd | √ | √ |
| xlwt | √ | × |
| openpyxl | × | √ |
关于性能表现,这两种包(指xlrd/xlwt与openpyxl)在读写小文件时速度差异不明显。然而,当处理较大文件时,xlrd和xlwt的速度明显优于openpyxl。
尽管xlrd/xlwt在速度上占优,但xlwt无法生成xlsx格式是一个关键限制。因此,若要在保证结果兼容性的前提下尽量提高效率,建议采用混合策略:使用xlrd进行读取,使用openpyxl进行写入。
一、xlrd:对xls、xlsx文件进行读操作
1.获取工作簿对象:xlrd.open_workbook()
使用workBook = xlrd.open_workbook(filemname)可以打开Excel文件并读取数据。
注意:filemname参数需包含文件名及路径。若路径或文件名中包含中文,需在字符串前加r表示原生字符,例如r'D:\记录表.xls'。
import xlrd
filename=r'D:\记录表.xls'
workBook=xlrd.open_workbook(filename)
2.获取工作表(sheet)对象
1)获取所有sheet页的名字,返回一个列表。
workBook.sheet_names()
2)根据sheet页的名字获取指定表名的表,返回的是一个对象。
sheetName = workBook.sheet_by_name(‘sheet1')
3)根据sheet索引获取对应sheet表(索引是从0开始的),返回的是一个对象。
sheetName = workbook.sheet_by_index(0)
3.获取sheet的名称:name属性。
sheetName.name
4.获取行数和列数:nrows、ncols属性。
1)获取表格的总行数。
sheetName.nrows
2)获取表格的总列数。
sheetName.ncols
5.获取整行或整列的值(数组):row_values、col_values方法。
rows = sheetName.row_values(0) # 获取第一行内容,返回一个列表
cols = sheetName.col_values(0) # 获取第一列内容,返回一个列表
6.获取指定单元格的值:cell(a,b).value或row(1)[0].value。
sheetName.cell(1,0).value # 获取第2行第一列的单元格数据
sheetName.row(1)[0].value # 获取第2行第一列的单元格数据
7.获取单元格内容的数据类型:ctype属性。
sheetName.cell(1,0).ctype
注意:返回为代表数据类型的值,编码分别代表:ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error。
二、xlwt:对xls文件进行写操作
1.新建工作簿:xlwt.Workbook()。
workBook = xlwt.Workbook()
2.在工作簿中新建sheet页:add_sheet()。
table = workBook .add_sheet(‘Over',cell_overwrite_ok=True) # 如果对同一单元格重复操作会发生overwrite Exception,cell_overwrite_ok为可覆盖
sheet = workBook .add_sheet(sheet_name) # 新增sheet表
import xlwt
wb=xlwt.Workbook(encoding='utf-8') # 创建一个工作薄
sheet=wb.add_sheet('文件阅读记录信息表') # 创建一个工作表
3.向表格中写入数据:write(i,j,value)。
sheet.write(i,j,value) # 向单元格(i,j)写入数据value
4.保存工作簿:save()。
workBook.save(path)
三、openpyxl:
1、对xlsx文件进行写操作
1).新建工作簿:openpyxl.Workbook()。
workBook = openpyxl.Workbook() # 新建工作簿
2).在工作簿中新建sheet页:create_sheet()。
sheet = workBook .create_sheet(sheet_name) # 新增sheet表:sheet_name
3).向表格中写入数据:cell(i,j,value) --索引从1计数。
sheet= workBook .active # 获得当前活跃的工作页,默认为第一个工作页
sheet.cell(i,j,value) # 向单元格(i,j)第i行第j列写入数据value
注意:行号和列号都从1开始计数,即(1,1)为第一行第一列。
4).保存工作簿:save()。
workBook .save(path)
2、openpyxl:对xlsx文件进行读操作
1).获取工作簿对象:openpyxl.load_workbook()。
workBook = openpyxl.load_workbook(filemname) # 读取xlsx文件
注:filemname为文件名以及路径,如果路径或者文件名有中文给前面加一个r表示原生字符。
2).获取工作表(sheet)对象。
workBook.get_sheet_names() # 获取所有sheet页的名字(所有工作表名)
sheetName = workBook.get_sheet_by_name(‘sheet1') # 根据sheet页的名字获取指定表名的表
sheetName = workBook.worksheets[0] # 根据sheet索引获取对应sheet表
3).获取sheet的名称:title属性。
sheetName.title # 获取sheet的名称
4).获取行数和列数:max_row、max_column属性。
sheetName.max_row # 获取表格的总行数
sheetName.max_column # 获取表格的总列数
5).获取整行或整列的值(数组):rows[i]、columns[i]。
rows = sheetName.rows # 获取每一行内容,这是一个生成器,里面是每一行数据,每一行数据由一个元组类型包裹
cols = sheetName.columns # 获取每一列内容,同上
sheetName.rows[0] # 获取第一行内容–索引从0计数
sheetName.columns[0] # 获取第一列内容–索引从0计数
6).获取指定单元格的值:cell(a,b).value–索引从1计数。
sheetName[‘A1'].value # 获取第1行第一(A)列的单元格数据
sheetName.cell(1,1).value # 获取第1行第一列的单元格数据
注:此处的行数和列数都是从1开始计数的,而在xlrd中是由0开始计数的。
总结
到此这篇关于Python对Excel进行处理的文章就介绍到这了,更多相关Python对Excel处理内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













