前面攒了不少工具,这一篇换一批更「硬核」的方向:扒网页、读 PPT、理配置、出 PDF、剪视频、抽大奖。六个脚本覆盖文档、网络、数据、多媒体、趣味场景,和前作的选题没有重叠,代码完整、依赖常见,复制回去改改就能用。
1. 批量提取 PPT 文字(把演示稿变成纯文本)
收到一堆 PPT 只想快速看内容,或要把演讲稿转成文档,用 python-pptx 把所有文本框文字一次性读出来,比一页页点开快得多。
(需 pip install python-pptx)
from pptx import Presentation
defextract_ppt(path):
prs = Presentation(path)
for i, slide in enumerate(prs.slides, 1):
print(f"--- 第 {i} 页 ---")
for shape in slide.shapes:
if shape.has_text_frame:
print(shape.text_frame.text)
# extract_ppt("demo.pptx")
小提示:只读取文本框里的文字,图表、表格内的数据不会提取;适合做内容速览或检索,若要保全格式建议另存为 PDF。
2. 网页内容抓取(把公开页面的标题扒下来)
想批量收集某个公开页面的标题、链接,或做简单的舆情采集,用 requests 拿到页面、BeautifulSoup 解析即可,十几行就能跑。
(需 pip install requests beautifulsoup4)
import requests
from bs4 import BeautifulSoup
deffetch_titles(url):
html = requests.get(url, timeout=5).text
soup = BeautifulSoup(html, "html.parser")
for tag in soup.find_all(["h1", "h2", "h3"]):
print(tag.get_text(strip=True))
# fetch_titles("http://example.com")
小提示:示例用 example.com,换成你要抓的公开页面即可;抓取频率别太高,遵守对方网站的 robots 规则;需要登录或动态加载的页面要用更复杂的方式处理。
3. JSON 数据处理(程序的配置文件就这样理)
写程序离不开配置,JSON 是最常见的格式。用标准库 json 读写,既能加载配置、也能把结果持久化,零依赖。
(Python 标准库,无需安装)
import json
defload_cfg(path):
with open(path, encoding="utf-8") as f:
return json.load(f)
defsave_cfg(data, path):
with open(path, "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
# cfg = load_cfg("config.json")
# cfg["theme"] = "dark"
# save_cfg(cfg, "config.json")
小提示:ensure_ascii=False 保证中文正常显示;indent=2 让文件更易读;适合做程序配置、轻量数据交换,比手写 txt 规整得多。
4. 生成 PDF 报表(把数据变成正式文档)
要把一份名单、一张成绩单、一段说明导出成 PDF,reportlab 是最常用的方案,逐行绘制就能生成一份干净的文件。
(需 pip install reportlab)
from reportlab.pdfgen import canvas
defmake_pdf(path, lines):
c = canvas.Canvas(path)
y = 800
for line in lines:
c.drawString(50, y, line)
y -= 20
c.save()
print("已生成:", path)
# make_pdf("report.pdf", ["姓名:张三", "部门:技术", "得分:95"])
小提示:drawString 的 x/y 是坐标,y 从下往上增大、这里从上往下递减;复杂排版可换用 Platypus 组件,此处演示最基础的逐行输出。
5. 视频片段裁剪(只留最精彩的几秒)
录了一段长视频,只想保留中间一段?用 moviepy 按秒截取,比打开专业剪辑软件快得多。
(需 pip install moviepy)
from moviepy import VideoFileClip
defcut(in_path, out_path, start, end):
clip = VideoFileClip(in_path)
part = clip.subclipped(start, end) if hasattr(clip, "subclipped") else clip.subclip(start, end)
part.write_videofile(out_path)
clip.close()
print("已裁剪:", out_path)
# cut("raw.mp4", "short.mp4", start=5, end=15)
小提示:start/end 单位是秒;底层依赖 ffmpeg;moviepy 2.x 用 subclipped、1.x 用 subclip,上面已做兼容;大视频裁剪较耗时,先定好片段再处理。
6. 随机抽奖小工具(年会、点名、抽签都能用)
聚会、培训要抽个人,用 random.sample 一行就能保证不重复中奖,比撕纸条公平也快。
(Python 标准库,无需安装)
import random
defdraw(names, n=1):
return random.sample(names, n)
# print(draw(["张三", "李四", "王五", "赵六"], n=2))
小提示:random.sample 不会重复抽取同一人;调一下 n 就能控制中奖人数;配合循环可做多轮抽奖,结果当场打印出来即可。
这 6 个脚本分布在文档提取、网络采集、数据配置、报表生成、视频剪辑、趣味抽奖六个场景,和前作的选题互不重叠。它们胜在「拿来就能解决一个具体麻烦」——挑一个最对胃口的先跑通,改改参数,它就成了你自己的小工具。