网站首页 > 技术文章 正文
最近在琢磨数据分析工作的自动化,手动做报告真是太费劲啦!试过用Python整了个自动生成PDF报告的小工具,效果还不错。今天就聊聊怎么用Python把数据处理、可视化和PDF生成一条龙搞定。
reportlab:PDF生成的得力助手
reportlab是Python里特别好用的PDF生成库,搭配起来做报表简直不要太方便。装它超简单:
pip install reportlab
来个最基础的PDF示例:
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
# 新建个PDF文件
pdf = canvas.Canvas(“简单报告.pdf”, pagesize=A4)
pdf.drawString(100, 750, “这是我的第一份Python生成的报告”)
pdf.save()
温馨提示:记得指定pagesize,不然默认页面可能有点小
数据可视化:让报告更生动
光有文字多没意思,加点图表才够味儿。matplotlib这个库画图超好用:
import matplotlib.pyplot as plt
import numpy as np
# 造点数据
sales = [120, 150, 180, 210, 165]
months = ['1月', '2月', '3月', '4月', '5月']
# 画个柱状图
plt.figure(figsize=(8, 6))
plt.bar(months, sales)
plt.title('销售数据统计')
plt.savefig('sales_chart.png')
组合拳:图文并茂的报告
把文字和图片都塞进PDF里:
from reportlab.lib.utils import ImageReader
def create_report():
pdf = canvas.Canvas(“完整报告.pdf”, pagesize=A4)
# 加标题
pdf.setFont(“Helvetica-Bold”, 16)
pdf.drawString(100, 750, “2024年第一季度销售报告”)
# 放图片
img = ImageReader('sales_chart.png')
pdf.drawImage(img, 50, 400, width=500, height=300)
# 加说明文字
pdf.setFont(“Helvetica”, 12)
pdf.drawString(100, 350, “从图表可以看出,销售额整体呈上升趋势”)
pdf.save()
进阶玩法:自动处理表格
要是数据多,可以用platypus模块处理表格:
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle
from reportlab.lib import colors
def create_table_report():
doc = SimpleDocTemplate(“表格报告.pdf”, pagesize=A4)
# 准备表格数据
data = [
['月份', '销售额', '同比增长'],
['1月', '120万', '15%'],
['2月', '150万', '25%'],
['3月', '180万', '20%']
]
# 设置表格样式
table = Table(data)
table.setStyle([
('GRID', (0, 0), (-1, -1), 1, colors.black),
('BACKGROUND', (0, 0), (-1, 0), colors.grey)
])
doc.build([table])
温馨提示:表格样式可以自己调整,比如改颜色、字体大小啥的
完整代码示例:
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
from reportlab.lib.utils import ImageReader
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle
from reportlab.lib import colors
import matplotlib.pyplot as plt
import numpy as np
def generate_chart():
sales = [120, 150, 180, 210, 165]
months = ['1月', '2月', '3月', '4月', '5月']
plt.figure(figsize=(8, 6))
plt.bar(months, sales)
plt.title('销售数据统计')
plt.savefig('sales_chart.png')
plt.close()
def create_full_report():
# 先生成图表
generate_chart()
# 创建PDF
pdf = canvas.Canvas(“数据分析报告.pdf”, pagesize=A4)
# 添加内容
pdf.setFont(“Helvetica-Bold”, 16)
pdf.drawString(100, 750, “2024年第一季度销售报告”)
img = ImageReader('sales_chart.png')
pdf.drawImage(img, 50, 400, width=500, height=300)
pdf.setFont(“Helvetica”, 12)
pdf.drawString(100, 350, “销售情况分析说明:”)
pdf.drawString(120, 330, “1. 销售额持续增长”)
pdf.drawString(120, 310, “2. 第四月份达到峰值”)
pdf.save()
# 运行试试看
create_full_report()
搞定啦!代码运行完就能看到生成的PDF报告。要是想改报告样式,调整一下坐标和格式就好。试着改改参数,做出自己想要的报告样式吧!
猜你喜欢
- 2025-07-07 20种Python数据可视化绘图 直接复制可用
- 2025-07-07 第十二章:Python与数据处理和可视化
- 2025-07-07 Python数据可视化:比较常用的图表工具库
- 2025-07-07 Python能做出BI软件的联动图表效果?这可能是目前唯一的选择
- 2025-07-07 Python 数据分析必学的 10 个核心库:从基础操作到高阶建模全攻略
- 2025-07-07 实战PyQt5: 162-使用堆积柱状图显示温度信息
- 2025-07-07 每天一个 Python 库:matplotlib 全能绘图神器零基础到进阶!
- 2025-07-07 AI办公自动化-kimi批量在多个Excel工作表中绘制柱状图
- 2025-07-07 我用Python的Seaborn库,绘制了15个超好看图表!
- 2025-07-07 Python数据可视化:从Pandas基础到Seaborn高级应用
- 276℃Python短文,Python中的嵌套条件语句(六)
- 275℃python笔记:for循环嵌套。end=""的作用,图形打印
- 272℃PythonNet:实现Python与.Net代码相互调用!
- 266℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 266℃Python实现字符串小写转大写并写入文件
- 126℃原来2025是完美的平方年,一起探索六种平方的算吧
- 107℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 107℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 最近发表
-
- Python入门体验第二课教学反思:学情把握不准确,意外连连
- Python学不会来打我(95)python工厂函数知识点总结
- Python——使用reduce()方法(python函数reduce)
- Python每日一题(python输出每日一贴)
- Python学不会来打我(92)python代码调试知识总结(五)属性问题
- Python 的 __init__ 一起认识认识
- Python中 __init__的通俗解释是什么?
- Rocky Linux 9 系统初始化与安全加固脚本
- Python构建MCP服务器完整教程:5步打造专属AI工...
- Python的import都在用,可没人告诉我底层是这样的
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)