1. xlrd_xlwt
简介¶
python操作excel主要用到xlrd,xlwt和xlutils能将xlrd这三个库 - xlrd是只能读excel的库, - xlwt是只能新建excel的库。 - xlutils能将xlrd.Book转为xlwt.Workbook,从而得以在现有xls的基础上修改数据,并创建一个新的xls,实现修改
pip install xlrd pip install xlwt pip install xlutils
1. xlrd库使用¶
Book(class) 由xlrd.open_work("example.xls")返回 nsheets: sheets数 sheet_names: sheet名称列表 sheets: sheet列表 sheet_by_index(sheetx): 按序号提取sheet sheet_by_name(sheet_name): 按名称提取sheet Sheet(class) 由Book object相关方法返回 name: sheet名 nrows: 行数 ncols: 列数 cell(rowx,colx): 第rows行colx列的单元格 cell_type(rowx,colx): 数据类型 cell_value(rows,colx): 数值 col(colx): 第colx列所有单元格组成的列表 col_slice(colx,start_rowx=0,end_rowx=None): 第colx列指定单元格组成的列表 col_types(colx,start_rowx=0,end_rowx=None): 第colx列指定单元格数值类型组成的列表 col_values(colx,start_rowx=0,end_rowx=None): 第colx列指定单元格数值组成的列表 row同样有col的各项操作,此处略去 Cell(class) 由Sheet object(s)相关方法返回 ctype: 一个int型变量,对应不同的数值类型 value: 单元格的值
2. xlwt库使用¶
Workbook(class) 由xlwt.Workbook()返回 encoding: 编码方案 add_sheet(sheet_name): 添加sheet get_sheet(Sheet_name): 选择sheet save(file_name): 保存 Worksheet(class) 由Workbook object相关方法返回 write(rows,colx,cell_value,style): 编辑单元格 row(rowx).write(colx,cell_value,style): 编辑行 flush_row_data(): 减少内存压力,flush之前行不可再修改 col(colx),write(rows,cell_value,style): 编辑列 easyxf(function) 创建XFStyle instance,格式控制 expression syntax: (<element>:(<attribute> <value>,)+;)+ <element> - <attribute> - <value>: (加粗为默认格式,以下所列并非全部) font - bold - True or False - colour - {colour} - italic - True or False - name - name of the font, Arial - underline - True or False alignment - direction - general, lr, rl - horizontal - general, left, center, right, filled - vertical - bottom, top, center, justified, distributed - shrink_to_fit - True or False bolders - left - an integer width between 0 and 13 - right - an integer width between 0 and 13 - top - an integer width between 0 and 13 - bottom - an integer width between 0 and 13 - diag - an integer width between 0 and 13 - left_colour - {colour}*, automatic colour - right_colour - {colour}*, automatic colour - ... pattern - back_color - {colour}*, automatic colour - fore_colour - {colour}*, automatic colour - pattern - none, solid, fine_dots, sparse_dots {colous}*: black, (dark_)(light_)blue, gold, (dark_)(light_)green, ivory, lavender, (light_)orange, pink, (dark_)red, rose, violet, white, (dark_)(light_)yellow, ...
3. xlutils库使用¶
copy: 将xlrd.Book转为xlwt.Workbook styles: 读取xlrd.Workbook的每一个单元格的style display: 简单而安全地呈现xlrd读取的数据 filter: 拆分与整合多个xls文件 margins: 查看表格稀疏程度 save: 序列化xlrd.Book,转存为binary xls或stream
tips
1. xlrd.open_workbook(fomatting_info=):当formatting_info=Ture,读取workbook并保留格式 2. xlrd.open_workbook(on_demand=): 当on_demand=True,只有被要求时才将worksheet载入内存,读取大文件时使用 3. xlwt.Worksheet.flush_row_data(): 减少内存占用,被刷新的行不能再访问或修改,建议每1000行刷新一次(若列很多当调整) 4. xlwt.Workbook(encoding=): 选择创建的workbook的编码
案例¶
1.对excel的写操作实例:¶
将一个列表的数据写入excel, 第一行是标题,下面行数具体的数据
#!/usr/bin/python # _*_ coding: utf-8 _*_ """ @Time : 2019/1/23 14:08 @File : 1.py @Software: PyCharm """ import xlwt # 只能写不能读 stus = [['姓名', '年龄', '性别', '分数', '手机号码'], ['张三', 22, '女', 50, '12776238304'], ['李四', 25, '男', 72.5, '11228374621'], ['王五', 33, '男', 100, '12372615263'], ['赵六', 42, '女', 66.8, '11129374727'] ] book = xlwt.Workbook() # 新建一个excel sheet = book.add_sheet('case1_sheet') # 添加一个sheet页,页名字是case1_sheet row = 0 # 控制行 for stu in stus: col = 0 # 控制列 for s in stu: # 再循环里面list的值,每一列 sheet.write(row, col, s) col += 1 row += 1 book.save('stu_1.xls') # 保存到当前目录下
D:\code\code-django\库\excel操作 的目录 2019/01/23 14:12 <DIR> . 2019/01/23 14:12 <DIR> .. 2019/01/23 14:12 796 1.py 2019/01/23 14:12 5,632 stu_1.xls # 产生这个文件 2019/01/23 14:08 129 __init__.py 3 个文件 6,557 字节 2 个目录 28,743,331,840 可用字节
姓名 | 年龄 | 性别 | 分数 | 手机号码 |
---|---|---|---|---|
张三 | 22 | 女 | 50 | 12776238304 |
李四 | 25 | 男 | 72.5 | 11228374621 |
王五 | 33 | 男 | 100 | 12372615263 |
赵六 | 42 | 女 | 66.8 | 11129374727 |
2.对excel 的读操作:¶
import xlrd # 只能读不能写 book = xlrd.open_workbook('stu_1.xls') # 打开一个excel sheet = book.sheet_by_index(0) # 根据顺序获取sheet sheet2 = book.sheet_by_name('case1_sheet') # 根据sheet页名字获取sheet print(sheet.cell(0, 0).value) # 指定行和列获取数据 print(sheet.cell(0, 1).value) print(sheet.cell(0, 2).value) print(sheet.cell(0, 3).value) print(sheet.ncols) # 获取excel里面有多少列 print(sheet.nrows) # 获取excel里面有多少行 print(sheet.get_rows()) # for i in sheet.get_rows(): print(i) # 获取每一行的数据 print(sheet.row_values(0)) # 获取第一行 for i in range(sheet.nrows): # 0 1 2 3 4 5 print(sheet.row_values(i)) # 获取第几行的数据 print(sheet.col_values(1)) # 取第一列的数据 for i in range(sheet.ncols): print(sheet.col_values(i)) # 获取第几列的数据
"C:\Program Files\Python37\python.exe" D:/code/code-django/库/excel操作/read.py 姓名 年龄 性别 分数 5 5 <generator object Sheet.get_rows.<locals>.<genexpr> at 0x00000231D5D0D4F8> [text:'姓名', text:'年龄', text:'性别', text:'分数', text:'手机号码'] [text:'张三', number:22.0, text:'女', number:50.0, text:'12776238304'] [text:'李四', number:25.0, text:'男', number:72.5, text:'11228374621'] [text:'王五', number:33.0, text:'男', number:100.0, text:'12372615263'] [text:'赵六', number:42.0, text:'女', number:66.8, text:'11129374727'] ['姓名', '年龄', '性别', '分数', '手机号码'] ['姓名', '年龄', '性别', '分数', '手机号码'] ['张三', 22.0, '女', 50.0, '12776238304'] ['李四', 25.0, '男', 72.5, '11228374621'] ['王五', 33.0, '男', 100.0, '12372615263'] ['赵六', 42.0, '女', 66.8, '11129374727'] ['年龄', 22.0, 25.0, 33.0, 42.0] ['姓名', '张三', '李四', '王五', '赵六'] ['年龄', 22.0, 25.0, 33.0, 42.0] ['性别', '女', '男', '男', '女'] ['分数', 50.0, 72.5, 100.0, 66.8] ['手机号码', '12776238304', '11228374621', '12372615263', '11129374727']
3.对excel的修改操作:¶
将excel中的某个值修改并重新保存
from xlutils.copy import copy import xlrd # xlutils:修改excel book1 = xlrd.open_workbook('stu_1.xls') book2 = copy(book1) # 拷贝一份原来的excel # print(dir(book2)) sheet = book2.get_sheet(0) # 获取第几个sheet页,book2现在的是xlutils里的方法,不是xlrd的 sheet.write(1, 3, 100) # 修改分数 sheet.write(1, 0, '张三他姥爷') # 修改姓名 book2.save('stu.xls')
运行后结果
姓名 | 年龄 | 性别 | 分数 | 手机号码 |
---|---|---|---|---|
张三她姥爷 | 22 | 女 | 100 | 12776238304 |
李四 | 25 | 男 | 72.5 | 11228374621 |
王五 | 33 | 男 | 100 | 12372615263 |
赵六 | 42 | 女 | 66.8 | 11129374727 |