Python:Excel
xlrd与xlwt:xls文件
如果不想看前半部分的基础知识,可以直接看最后的总结部分
1、两个模块
读xlrd
写xlwt
import xlrd,xlwt
2、读
2.1 文件、表格信息的获取
打开文件:xlrd.open_workbook('Excel_name.xls')
workBook = xlrd.open_workbook('安徽省.xls')
表格名:workBook.sheet_names()
返回一个list类型,其中包含了所有sheet表的名字
allsheetname=workBook.sheet_names() print(allsheetname) ['1-12', 'CNKI']
取其中一个表格的名字,以索引下标的方式
sheet1=allsheetname[0]
2.2读取
①获取整个sheet的内容并保存在变量中
按索引号:workBook.sheet_by_index(索引号)
按名字:workBook.sheet_by_name(名字)
#按索引号获取sheet内容 sheet1_content1=workBook.sheet_by_index(0) #按sheet名字获取sheet内容 sheet1_content2=workBook.sheet_by_name('1-12')
②sheet的名字、行数、列数
三个属性:name、nrows、ncols
s1=sheet1_content1 print(s1.name,s1.nrows,s1.ncols) 1-12 516 7
③获取某行和某列的数据(存为list)
方法:
获取第i+1行:row_values(i)
获取第j+1列:col_values(j)
#获取第7行的内容 rows=sheet1_content1.row_values(6) #获取第4列的内容 cols=sheet1_content1.col_values(3)
print(rows) [' 行政区域面积', '平方公里', '1841', '2182', '1695', '2344', '2046']
④获取某个单元格的值
以获取14行5列为例
三种:
sheet1_content1.cell(13,4).value sheet1_content1.cell_value(13,4) sheet1_content1.row(13)[4].value
cell(a,b).value
cell_value(a,b)
row(a)[b].value
补充
循环Excel的所有行输出每个单元格值:
#循环表的每一行 for row in sheet1_content1.get_rows(): #循环一行的所有列 for col in row: #获取每个单元格的值 print(col.value())
⑤单元格内容的数据类型
共6种:[0 empty , 1 string , 2 number , 3 date ,4 boolean , 5 error]
通过ctype属性访问
注意内容与④中值间的不同:内容是cell(13,4),值是cell(13,4).value
sheet1_content1.cell(13,4).ctype
1
完整的读代码:
import xlrd def read_excel(): workBook = xlrd.open_workbook('安徽省.xls') allsheetname = workBook.sheet_names() # print(allsheetname) sheet1 = allsheetname[0] # print(sheet1) sheet1_content1 = workBook.sheet_by_index(0) sheet1_content2 = workBook.sheet_by_name('1-12') rows = sheet1_content1.row_values(6) cols = sheet1_content1.col_values(4) A1 = sheet1_content1.cell(13, 4).value A2 = sheet1_content1.cell_value(13, 4) A3 = sheet1_content1.row(13)[4].value print(A1, A2, A3) print(sheet1_content1.cell(13,4).ctype) if __name__=='__main__': read_excel()
3、写
①导入模块xlwt
import xlwt
②生成文件空间
xlwt.Workbook()
wb=xlwt.Workbook()
③给文件空间加表
add_sheet(表名)
sheet=wb.add_sheet('sheet1')
④向表中写入数据
sheet.write(row,col,内容)
for row in range(5): for col in range(4): sheet.write(row,col,'第{0}行第{1}列'.format(row,col))
⑤保存文件空间为文件
wb.save(文件名)
wb.save('test.xls')
完整代码:
import xlwt def write_excel(): wb=xlwt.Workbook() sheet=wb.add_sheet('sheet1') for row in range(5): for col in range(4): sheet.write(row,col,'第{0}行第{1}列'.format(row+1,col+1)) wb.save('test.xls') if __name__=='__main__': write_excel()
总结:
1、读时的关键语句:
wb=xlrd.open_workbook(文件名) #打开文件空间
allsheetname=wb.sheet_names() #所有表名
sheet1=wb.sheet_by_index(索引) #通过索引打开表
sheet2=wb.sheet_by_name(表名) #通过名字打开表
rows=sheet1.row_values(6) #第7行的所有值
cols=sheet1.col_values(5) #第6列的所有值
#访问单个值
A1=sheet1.cell(6,5).value
A2=sheet1.cell_value(6,5)
A3=sheet1.row(6)[5].value
#循环访问所有值 此处是col.value而非sheet.cell().value
for row in sheet1.get_rows():
for col in row:
print(col.value)
2、写时的关键语句:
wb=xlwr.Workbook() #创建工作空间
sheet=wb.add_sheet('sheet1') #创建表 表名为sheet1
#通过循环行列添加数据
for row in range(5):
for col in range(4):
sheet.write(row,col,'第{0}行第{1}列'.format(row+1,col+1))
wb.save('test.xls') #保存为xls文件
3、表格属性
sheet的名字、行数、列数
三个属性:name、nrows、ncols
sheet.name
sheet.nrows
sheet.ncols
补充:
1、读取EXCEL,不带第一行的标题
2、读取表格时,无法显示正确的汉字
openpyxl:xlsx
xlrd与xlwt处理的是xls文件,单个sheet最大的行数为65535,超过时报错ValueError: row index was 65536, not allowed by .xls format
当需要处理更多行数即xlsx时,可以使用openpyxl函数,最大行数为1048576。
以下的基础部分不想看,可以直接去'注意'和'总结'部分
1、模块
import openpyxl
2、读取
①加载xlsx文件
filename=r'D:\诗歌.xlsx' wb=openpyxl.load_workbook(filename) #加载文件
②获取sheet内容
sheetnames = wb.get_sheet_names()#获取所有sheet的名字 sheet = wb.get_sheet_by_name(sheetnames[0])#以名字的方式访问sheet
#也可以直接以Key索引的方式访问
sheet = wb[ sheetnames[0] ]
#如果有多个表,可以用for循环遍历
#for sheet in wb:
print(sheet.title)
③获取sheet属性
rows = sheet.max_row #最大行数 cols = sheet.max_colmn #最大列数
④获取某个单元格的值
sheet.cell(1,1).value
sheet['A1']
3、写入
①打开workbook并添加sheet
outwb=openpyxl.Workbook() #创建一个Workbook sheet =outwb.create_sheet(index=0) #在Workbook下创建sheet
②写入
for row in range(1,10): for col in range(1,10): sheet.cell(row,col).value='{}行{}列'.format(row,col)
#以上是主流方式
#还有其他两种方式
#①用Key索引方式 sheet['A1']='1行1列'
#②一次写一行,从原文件最左下方开始 sheet.append([1,2,3])
#方法②的结果是在原文件后多了1行3列,内容是1 2 3
③保存
out_filename='测试.xlsx' outwb.save(out_filename)
注意:
1、openpyxl只能读写xlsx文件,不能读写xls文件;xlwt和xlrd正好相反;
2、openpyxl的读写起始行,在循环时都是从1开始,表示第i行;而xlwt与xlrd的起始行是0,实际表示第i+1行
3、写文件名时,要加r前缀,或者把字符串中的所有连接符\写为双斜杠\\
总结:
1、读的关键语句
filename=r'D:\词语.xlsx' wb=openpyxl.load_workbook(filename) #①打开xlsx文件 sheetnames=wb.get_sheet_names() #②获取文件中的所有sheet名 ws=wb.get_sheet_by_name(sheetnames[0])#③打开第一个sheet #④获取最大行数和最大列数 rows = ws.max_row cols = ws.max_column #⑤for循环读取单元格数据,起始下标为1 for r in range(1 , rows): for c in range (1 , cols): print( ws.cell(r,c).value )
2、写的关键语句
outwb=openpyxl.Workbook() #①新建workbook ws=outwb.create_sheet(index=0) #②在之前的workbook中新建一个sheet #③用for循环为每个单元格赋值,range(1,len+1),len为要写入的行/列数 #下文便是10行10列 for r in range(1,11): for c in range(1,11): ws.cell(r,c).value='{}行{}列'.format(r,c) #④保存为文件 out_filename='测试.xlsx' outwb.save( out_filename )
学习自:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性