python如何读取excel表格数据
文章目录
- excel的格式
- xls格式文件
- xlrd
- xlwt
- excel读取xls类型数据三个方法
- xlsx格式文件
- openpyxl
excel的格式
excel有xls和xlsx两种格式,他们的区别在于
- 文件格式不同:xls是一个特有的二进制格式,其核心结构是符合文档类型的机构,而xlsx的核心结构是xml类型的结构,采用的事基于xml的压缩方式,使其占用的空间更小。xlsx中最后一个x的意义就在于此。
- 兼容性不同,xlsx格式是向下兼容的,可以兼容xls格式。
- python自带的模块中有针对xls格式的xlrd和xlwt模块,但是这两个库仅仅针对xls的操作,当我们要操作xlsx格式文件时,则需要使用到openpyxl第三方库

xls格式文件
python中对xls格式文件相关的包有三个:xlrd、xlwt和xlutils
- xlrd只能读取文件,不能写入文件
- xlwt只能写入文件,不能读取文件
- xlutils通过.copy.copy方法,将xlrd读取的文件复制给xlwt处理,相当于在xlrd和xlwt之间架起一座桥梁
xlrd
# xls
import xlrdpath='11.xls'
index=0
sheetname='sheet1'
# 打开文件,绝对路径或者相对路径,找不到文件会报错
workbook=xlrd.open_workbook(path)
# 获取文件中所有的sheet对象
sheets=workbook.sheets()
# 获取文件中所有的sheet名称,返回名称列表
names=workbook.sheet_names()
# 获取一个文件中有多少对象
n=workbook.nsheets# 获取对应索引的对象,索引从0开始
sheet_index=workbook.sheet_by_index(index)
# 获取指定工作表的表名
name=sheet_index.name# 获取对应名字的对象
sheet_name=workbook.sheet_by_name(sheetname)
print(sheet_name)# 获取xls的行和列的数量
nrows=sheet_index.nrows
ncols=sheet_index.ncols# 获取工作表对应行和列的单元格组成的列表
# 元素的格式是 数值类型:对应数据
row_list=sheet_index.row(0)
print(row_list,'\n')
row_list=sheet_index.row(1)
# print(row_list,'\n')
col_list=sheet_index.col(2)
# print(col_list,'\n')# 取出工作表对应行和列的值组成的列表
row_value=sheet_index.row_values(-1)# 最后一行
print(row_value,"\n")
col_value=sheet_index.col_values(0)# 输出行和列
row_type=sheet_index.row_types(6)# 数据类型:0.空,1.字符串,2.数字,3.日期,4.布尔,5.error
print(row_type,"\n")
col_type=sheet_index.col_types(1)# 根据索引值,返回该行的长度,列没有对应操作
len=sheet_index.row_len(1)# 对单元格进行操作
# 根据行列的索引,返回单元格的数据 数据类型:对应数据
di=sheet_index.cell(0,1)
print(di,"\n")# 返回单元格的数据
ty=sheet_index.cell_value(0,1)
ty=sheet_index.cell(0,1).value
ty=sheet_index.row(0)[1].value
运行结果

xlwt
import xlwtname='sheet1'
new_workbook=xlwt.Workbook('utf-8')
# 在工作簿中添加一个工作表,如果不添加会报错
new_sheet=new_workbook.add_sheet(name)# 添加内容
row=0
col=0
text='11111'
new_sheet.write(row,col,text)
# 保存
file_path='11.xls'
new_workbook.save(file_path)
excel读取xls类型数据三个方法
可以通过一下方法,对xls数据进行读取、写入和追加写入
import xlrd
import xlwt
from xlutils.copy import copy# 读取xls格式的文件,读取全部的数据,以最大的行和最大的列来计算
def read_xls_all(url,index):'''url:文件的路径index:第几个工作表,从1开始返回值:表格中的数据'''# 打开指定的工作簿workbook=xlrd.open_workbook(url)# 获取工作簿中所有的表格sheets=workbook.sheet_names()# sheets: ['Sheet1', 'Sheet2', 'Sheet3']print('sheets:',sheets)# 获取index的表格worksheet=workbook.sheet_by_name(sheets[index])datas=[]# 遍历每一行数据for i in range(0,worksheet.nrows):item=[]# 遍历每一列数据for j in range(0,worksheet.ncols):item.append(worksheet.cell_value(i,j))# 可以获取单个数据datas.append(item)return datas# 往xls文件写入数据
def write_xls_excel(url,sheet_name,data):'''data必须是二维表'''# 创建工作簿对象workbook=xlwt.Workbook()# 创建一个工作表对象sheet=workbook.add_sheet(sheet_name)# 遍历每一行数据for i in range(0,len(data)):for j in range(0,len(data[i])):sheet.write(i,j,data[i][j])# 把原来所有的数据都清空,再写入数据workbook.save(url)print('写入成功')# 以追加的形式写入xls
def write_xls_add(url,index,data):workbook=xlrd.open_workbook(url)sheets=workbook.sheet_names()worksheet=workbook.sheet_by_name(sheets[index])# 获取行数rows=worksheet.nrows# 将xlrd对象拷贝转化为xlwt对象new_workbook=copy(workbook)# 获取转化后工作簿中的第index个表格new_worksheet=new_workbook.get_sheet(index)# 遍历每一行数据for i in range(0,len(data)):for j in range(0,len(data[i])):# 追加数据new_worksheet.write(i+rows,j,data[i][j])# 保存工作簿new_workbook.save(url)print('追加数据成功')
xlsx格式文件
openpyxl
openpyxl不能凭空产生一个表格文件,但是xlwt可以,所以openpyxl需要传入一个excel文件
import openpyxl# 读取xlsx格式文件
def read_xlsx_excel(url,sheet_name):'''读取xlsx格式文件返回值:表格中的数据'''# 使用openpyxl加载指定路径的excel文件并得到对应的workbook对象workbook=openpyxl.load_workbook(url)# 根据指定表名获取表格并得到对应的sheet对象sheet=workbook[sheet_name]data=[]# 遍历表格中的每一行for row in sheet.rows:da=[]for item in row:da.append(item.value)data.append(da)return data# 写入数据
def write_xlsx_excel(url,sheet_name,data):'''写入xlsx格式文件会创建一个名为sheet_name的对象,把data写入,其他的全部清空'''# 创建工作簿workbook=openpyxl.Workbook()# 创建工作表对象sheet=workbook.active# 设置工作表的名字sheet.title=sheet_name# 遍历数据for i in range(0,len(data)):for j in range(0,len(data[i])):# 写入数据,注意openpyxl的行和列式从1开始的sheet.cell(row=i+1,column=j+1,value=data[i][j])# 保存workbook.save(url)print('写入成功')# 追加写入xlsx格式文件
def write_xlsx_add(url,sheet_name,datas):'''追加数据'''# 使用openpyxl加载指定路径的excel文件并得到对应的workbook对象workbook=openpyxl.load_workbook(url)# 根据指定表名获取表格并得到对应的sheet对象sheet=workbook[sheet_name]# 增加一个定位sheet['B1']='开始'# 可用于增加表头for item in datas:sheet.append(item)# 保存workbook.save(url)# 覆盖原来已经存在的文件print('追加数据成功')url='example.xlsx'
sheet_name='Sheet2'
data=read_xlsx_excel(url,sheet_name)
print(type(data[0][0]))
print(data)# write_xlsx_excel(url,'Sheet2',data)
write_xlsx_add(url,sheet_name,data)