xlrd与xlwt库是python常见操作库。我刚接触时候产生过误区,任务xlrd库与xlwt选择任意一种就可以实现文件读写,然而实际并不是。
xlrd与xlwt库的相同点
都支持对Excel文件格式为xls(对别的文件不甚了解)文件进行操作的。
xlrd与xlwt库的不同点
xlrd只支持对Excel文件格式为xls文件的读取
xlwt只支持对Excel文件格式为xls文件的写入
xlwt库的写操作
import xlwt # xlwt非python自带库,需pip命令安装
wt = xlwt.Workbook() #创建一个Excel工作簿的对象
table = wt.add_sheet("demo") #在Excel工作簿里面创建一个名为“demo”的表格
如下图:
接下来是往表里写数据
#创建列名分别为:col1,col2,col3,col4,col5,填入第一行,位置依次为:(0,0),(0,1),(0,2),(0,3),(0,4)
table.write(0,0, "col1")
table.write(0,1, "col2")
table.write(0,2, "col3")
table.write(0,3, "col4")
table.write(0,4, "col5")
如下图:
# 填入 5 * 5 的表格数据
for i in range(0, 5):
for j in range(1, 6):
content = "{0} * {1}".format(j, i)
table.write(j,i, content) # 第j行 * 第i列,填入数据 content
wt.save("demo.xls") #保存Excel文件,命名为:demo.xls
如下图:
注:xls文件格式的数据行数最大值为65536行,最大列数是256(不过个人觉得超过最大列数可能性还是比较小的)。
xlrd库的读操作
import xlrd
rd = xlrd.open_workbook("demo.xls") #读取文件 demo.xls
sheets = rd.sheet_names() #获取所有sheet名
table = rd.sheet_by_name("demo") #通过sheet名获取名为 demo 的表
一种读取方法
# ceil方法
print("第1行 1~3 列", table.cell(0,0), table.cell(0,1), table.cell(0,2)) # (首行标题栏,即列名)
print("第2行 1~3 列", table.cell(1,0), table.cell(1,1), table.cell(1,2))
# ceil().value 方法
print("第2行 1~3 列", table.cell(1, 0), table.cell(1, 1), table.cell(1, 2))
print("第2行 1~3 列", table.cell(1,0).value, table.cell(1,1).value, table.cell(1,2).value)
上述print 输出结果为:
第1行 1~3 列 text:'col1' text:'col2' text:'col3'
第2行 1~3 列 text:'1 * 0' text:'1 * 1' text:'1 * 2'
第2行 1~3 列 text:'1 * 0' text:'1 * 1' text:'1 * 2'
第2行 1~3 列 1 * 0 1 * 1 1 * 2
可以看出 ceil().value的用法会直接取数据的值,不会像 celi()方法,会输出字段数据类型。
另一种读取方法
# row、col方法
print("第2行 第1列:", table.row(1)[0])
print("第3列 第1行:", table.col(2)[0])
# row().value、 col().value方法
print("第2行 第1列:", table.row(1)[0].value)
print("第3列 第1行:", table.col(2)[0].value)
上述print 输出结果为:
第2行 第1列: text:'1 * 0'
第3列 第1行: text:'col3'
第2行 第1列: 1 * 0
第3列 第1行: col3
可以看出 row().value、row().value的用法会直接取数据的值,不会像row(),col()方法,会输出字段数据类型。