本文介绍一下使用Python对Excel文件的基本操作,包括使用xlrd模块读取excel文件,使用xlwt模块将数据写入excel文件,使用openpyxl模块读取写入和修改excel文件。
【最近一些朋友反映个别代码无法调试(但是在我这里没问题),这里代码我都是调试过的,之前一年也没有朋友反馈过这些问题,所以大概率是版本问题。
我的版本如下: xlrd 1.1.0 、xlwt 1.3.0 、openpyxl 2.5.4 】
目录
1、使用xlrd模块对xls文件进行读操作
假设我们的表如下,是一个“农村居民家庭人均纯收入和农村居民家庭人均消费情况”的表格。后缀为.xls。里面包含两个工作表,“各省市”和“测试表”。
提一下,一个Excel文件,就相当于一个“工作簿”(workbook),一个“工作簿”里面可以包含多个“工作表(sheet)”
1.1 获取工作簿对象
引入模块,获得工作簿对象。
import xlrd #引入模块
#打开文件,获取excel文件的workbook(工作簿)对象
workbook=xlrd.open_workbook("DataSource/Economics.xls") #文件路径
1.2 获取工作表对象
我们知道一个工作簿里面可以含有多个工作表,当我们获取“工作簿对象”后,可以接着来获取工作表对象,可以通过“索引”的方式获得,也可以通过“表名”的方式获得。
'''对workbook对象进行操作'''
#获取所有sheet的名字
names=workbook.sheet_names()
print(names) #['各省市', '测试表'] 输出所有的表名,以列表的形式
#通过sheet索引获得sheet对象
worksheet=workbook.sheet_by_index(0)
print(worksheet) #<xlrd.sheet.Sheet object at 0x000001B98D99CFD0>
#通过sheet名获得sheet对象
worksheet=workbook.sheet_by_name("各省市")
print(worksheet) #<xlrd.sheet.Sheet object at 0x000001B98D99CFD0>
#由上可知,workbook.sheet_names() 返回一个list对象,可以对这个list对象进行操作
sheet0_name=workbook.sheet_names()[0] #通过sheet索引获取sheet名称
print(sheet0_name) #各省市
1.3 获取工作表的基本信息
在获得“表对象”之后,我们可以获取关于工作表的基本信息。包括表名、行数与列数。
'''对sheet对象进行操作'''
name=worksheet.name #获取表的姓名
print(name) #各省市
nrows=worksheet.nrows #获取该表总行数
print(nrows) #32
ncols=worksheet.ncols #获取该表总列数
print(ncols) #13
1.4 按行或列方式获得工作表的数据
有了行数和列数,循环打印出表的全部内容也变得轻而易举。
for i in range(nrows): #循环打印每一行
print(worksheet.row_values(i)) #以列表形式读出,列表中的每一项是str类型
#['各省市', '工资性收入', '家庭经营纯收入', '财产性收入', ………………]
#['北京市', '5047.4', '1957.1', '678.8', '592.2', '1879.0,…………]
col_data=worksheet.col_values(0) #获取第一列的内容
print(col_data)
1.5 获取某一个单元格的数据
我们还可以将查询精确地定位到某一个单元格。
在xlrd模块中,工作表的行和列都是从0开始计数的。
#通过坐标读取表格中的数据
cell_value1=sheet0.cell_value(0,0)
cell_value2=sheet0.cell_value(1,0)
print(cell_value1) #各省市
print(cell_value2) #北京市
cell_value1=sheet0.cell(0,0).value
print(cell_value1) #各省市
cell_value1=sheet0.row(0)[0].value
print(cell_value1) #各省市
2、使用xlwt模块对xls文件进行写操作
2.1 创建工作簿
# 导入xlwt模块
import xlwt
#创建一个Workbook对象,相当于创建了一个Excel文件
book=xlwt.Workbook(encoding="utf-8",style_compression=0)
'''
Workbook类初始化时有encoding和style_compression参数
encoding:设置字符编码,一般要这样设置:w = Workbook(encoding='utf-8'),就可以在excel中输出中文了。默认是ascii。
style_compression:表示是否压缩,不常用。
'''
2.2 创建工作表
创建完工作簿之后,可以在相应的工作簿中,创建工作表。
# 创建一个sheet对象,一个sheet对象对应Excel文件中的一张表格。
sheet = book.add_sheet('test01', cell_overwrite_ok=True)
# 其中的test是这张表的名字,cell_overwrite_ok,表示是否可以覆盖单元格,其实是Worksheet实例化的一个参数,默认值是False
2.3 按单元格的方式向工作表中添加数据
# 向表test中添加数据
sheet.write(0, 0, '各省市') # 其中的'0-行, 0-列'指定表中的单元,'各省市'是向该单元写入的内容
sheet.write(0, 1, '工资性收入')
#也可以这样添加数据
txt1 = '北京市'
sheet.write(1,0, txt1)
txt2 = 5047.4
sheet.write(1, 1, txt2)
最后被文件被保存之后,上文语句形成的“工作表”如下所示: