Python 进阶(六): Excel 基本操作
发布日期:2021-06-30 11:42:26 浏览次数:2 分类:技术文章

本文共 3827 字,大约阅读时间需要 12 分钟。

目录

1. 概述

在现实中,很多工作都需要与数据打交道,Excel 作为常用的数据处理工具,一直备受人们的青睐,而大部分人都是手动操作 Excel,如果数据量较小且是一些简单的操作还好说,但如果数据量较大或是一些复杂的操作,工作量可想而知,因此,我们需要掌握一种简单、高效的方法来操作 Excel。

在数据处理方面,Python 一直扮演着重要的角色,对于 Excel 操作,它有着完整且成熟的第三方库,使用也较为简单。

Python 中常用 Excel 操作库如下:

  • xlrd:从 Excel 中读取数据,支持 xls、xlsx。

  • xlwt:向 Excel 中写入数据,支持 xls。

  • xlutils:提供了一些 Excel 的实用操作,比如复制、拆分、过滤等,通常与 xlrd、xlwt 一起使用。

  • XlsxWriter:向 Excel 中写入数据,支持 xlsx。

  • openpyxl :用于读写 Excel,支持 xlsx。

2. 写入

我们向 Excel 中写入一些数据。

2.1 使用 xlwt

通过 pip install xlwt 命令安装。

import xlwt# 创建工作簿wb = xlwt.Workbook()# 创建表单sh = wb.add_sheet('test')# 创建字体对象font = xlwt.Font()# 字体加粗font.bold = Truealm = xlwt.Alignment()# 设置左对齐alm.horz = 0x01# 创建样式对象style1 = xlwt.XFStyle()style2 = xlwt.XFStyle()style1.font = fontstyle2.alignment = alm# write 方法参数1:行,参数2:列,参数3:内容sh.write(0, 1, '姓名', style1)sh.write(0, 2, '年龄', style1)sh.write(1, 1, '张三')sh.write(1, 2, 50, style2)sh.write(2, 1, '李四')sh.write(2, 2, 30, style2)sh.write(3, 1, '王五')sh.write(3, 2, 40, style2)sh.write(4, 1, '赵六')sh.write(4, 2, 60, style2)sh.write(5, 0, '平均年龄', style1)# 保存wb.save('test.xls')

执行结果:

2.2 使用 XlsxWriter

通过 pip install XlsxWriter 命令安装。

import xlsxwriter# 创建工作簿workbook = xlsxwriter.Workbook('test.xlsx')# 创建表单sh = workbook.add_worksheet('test')fmt1 = workbook.add_format()fmt2 = workbook.add_format()# 字体加粗fmt1.set_bold(True)# 设置左对齐fmt2.set_align('left')# 数据data = [    ['', '姓名', '年龄'],    ['', '张三', 50],    ['', '李四', 30],    ['', '王五', 40],    ['', '赵六', 60],    ['平均年龄', '', ]]sh.write_row('A1', data[0], fmt1)sh.write_row('A2', data[1], fmt2)sh.write_row('A3', data[2], fmt2)sh.write_row('A4', data[3], fmt2)sh.write_row('A5', data[4], fmt2)sh.write_row('A6', data[5], fmt1)chart = workbook.add_chart({
'type': 'line'})workbook.close()

XlsxWriter 可以很方便的生成图表。

import xlsxwriter# 创建工作簿wk = xlsxwriter.Workbook('test.xlsx')# 创建表单sh = wk.add_worksheet('test')fmt1 = wk.add_format()fmt2 = wk.add_format()# 字体加粗fmt1.set_bold(True)# 设置左对齐fmt2.set_align('left')# 数据data = [    ['', '姓名', '年龄'],    ['', '张三', 50],    ['', '李四', 30],    ['', '王五', 40],    ['', '赵六', 60],    ['平均年龄', '', ]]sh.write_row('A1', data[0], fmt1)sh.write_row('A2', data[1], fmt2)sh.write_row('A3', data[2], fmt2)sh.write_row('A4', data[3], fmt2)sh.write_row('A5', data[4], fmt2)sh.write_row('A6', data[5], fmt1)'''area:面积图bar:直方图column:柱状图line:折线图pie:饼图doughnut:环形图radar:雷达图'''chart = wk.add_chart({
'type': 'line'})# 创建图表chart.add_series( {
'name':'=test!$B$1', 'categories':'=test!$B$2:$B$5', 'values': '=test!$C$2:$C$5' })chart.set_title({
'name':'用户年龄折线图'})chart.set_x_axis({
'name':'姓名'})chart.set_y_axis({
'name':'年龄'})sh.insert_chart('A9', chart)wk.close()

执行结果:

3. 读取

我们使用 xlrd 读取之前写入的数据,使用 pip install xlrd 命令安装。

import xlrd# 打开wb = xlrd.open_workbook('test.xlsx')print( 'sheet名称:', wb.sheet_names())print( 'sheet数量:', wb.nsheets)# 根据 sheet 索引获取 sheetsh = wb.sheet_by_index(0)# 根据 sheet 名称获取 sheet# sh = wb.sheet_by_name('test')print( u'sheet %s 有 %d 行' % (sh.name, sh.nrows))print( u'sheet %s 有 %d 列' % (sh.name, sh.ncols))print('第二行内容:', sh.row_values(1))print('第三列内容:', sh.col_values(2))print('第二行第三列的值为:', sh.cell_value(1, 2))print('第二行第三列值的类型为:', type(sh.cell_value(1, 2)))

4. 修改

之前写入的数据还有一个平均年龄是空着的,我们先读取之前写入的数据,再计算出平均值,最后将平均值写入。这里要用到 xlutils 模块,使用 pip install xlutils 安装。

import xlrd, xlwtfrom xlutils.copy import copydef avg(list):    sumv = 0    for i in range(len(list)):        sumv += list[i]    return int(sumv / len(list))# formatting_info 为 True 表示保留原格式wb = xlrd.open_workbook('test.xls', formatting_info=True)# 复制wbc = copy(wb)sh = wb.sheet_by_index(0)age_list = sh.col_values(2)age_list = age_list[1:len(age_list)-1]avg_age = avg(age_list)sh = wbc.get_sheet(0)# 设置左对齐alm = xlwt.Alignment()alm.horz = 0x01style = xlwt.XFStyle()style.alignment = almsh.write(5, 2, avg_age, style)wbc.save('test.xls')

执行结果:


转载地址:https://ityard.blog.csdn.net/article/details/104454512 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Python 进阶(七): Word 基本操作
下一篇:Python 进阶(五):数据库操作之 SQLite

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月12日 21时14分00秒