xlrd模块用于读取excel文件,xlwt模块用于写入excel文件,二者搭配,可以灵活的操作excel文件。相比openpyxl模块,xlrd和xlwt可以操作不仅可以操作后缀为xlsx的文件,也可以操作后缀为xls的文件。

首先来看下xlrd模块,按照workbook, sheet,cell的3个层级,用法如下

1. workbook

通过open_workbook方法来获取对应的workbook,代码如下

>>> import xlrd
>>> workbook = xlrd.open_workbook('input.xlsx')

2. sheet

从workbook出发,可以通过整数下标索引或者对应的sheet name, 访问具体的sheet对象,代码如下

# 返回sheet的个数
>>> workbook.nsheets
4
# 返回sheet构成的list
>>> workbook.sheets()
[<xlrd.sheet.Sheet object at 0x02FFBC70>, <xlrd.sheet.Sheet object at 0x02FFBCB8>, <xlrd.sheet.Sheet object at 0x02FFBD00>, <xlrd.sheet.Sheet object at 0x02FFBD18>]
>>> workbook.sheets()[0]
<xlrd.sheet.Sheet object at 0x02FFBC70>
# 通过索引访问sheet
>>> workbook.sheet_by_index(0)
<xlrd.sheet.Sheet object at 0x02FFBC70>
# 返回sheet names构成的list
>>> workbook.sheet_names()
['all_gene', 'target_gene', 'filter_gene', 'cnv_result']
# 通过name访问sheet
>>> workbook.sheet_by_name('all_gene')
<xlrd.sheet.Sheet object at 0x02FFBC70>

3. cell

从sheet对象出发,可以访问对应的行,列以及单元格,代码如下

>>> ws = workbook.sheet_by_name('all_gene')
>>> ws.name
'all_gene'
# 返回行数
>>> ws.nrows
27280
# 返回列数
>>> ws.ncols
21
# 通过行列索引,返回cell对象
>>> ws.cell(0, 0)
text:'gene'
# 通过行列索引,返回cell对应的值
>>> ws.cell_value(0,0)
'gene'
# 通过以下函数对行或者列进行切片操作
# 第一个参数为列的索引
# 第二个参数为起始行
# 第三个参数为终止行
# 返回值
>>> ws.col_values(0, 0, 2)
['gene', 'LOC102725121']
# 返回cell对象
>>> ws.col_slice(0, 0, 2)
[text:'gene', text:'LOC102725121']

实际操作中,经常需要按照遍历excel文件,对应的代码如下

>>> for row in ws.get_rows():
... print(row[0].value)

get_rows方法行的生成器,通过遍历该生成器,访问每一行的元素,然后通过下标来访问对应的列元素,得到cell对象,通过cell对象的value属性获取单元格对应的值。

对于xlwt模块而言,其基本用法就简单很多,代码如下

>>> import xlwt
>>> wb = xlwt.Workbook()
>>> ws = wb.add_sheet('sheet1')
# 单元格写入的两种方式
# 第一种
>>> ws.write(0,0,'A1')
# 第二种
>>> ws.row(1).write(0,'A2')
>>> wb.save('out.xls')

结合xlrd和xlwt模块,就可以方便灵活的读写excel文件了。

·end·

通过xlrd和xlwt模块读写excel文件_公众号

一个只分享干货的

生信公众号