工具多了容易挑花眼,但真正天天能派上用场的,往往是那些解决「小、碎、烦」需求的脚本。这一篇不再局限六个,直接给你 8 个覆盖不同领域的实用脚本:音频转换、图片批处理、日志分析、系统信息、表格合并、图片旋转、本地聊天、数据绘图。每一个都能单独拿出来用,代码完整、依赖常见,复制回去改改参数即可运行。
1. 音频格式互转(wav 与 mp3 自由切换)
录音笔导出的 wav 太大,剪辑软件又只认 mp3,用 pydub 几行就能完成格式转换,批量处理也不在话下。
(需 pip install pydub,另需本机安装 ffmpeg 并加入系统 PATH)
from pydub import AudioSegment
defconvert(in_path, out_path):
audio = AudioSegment.from_file(in_path)
fmt = out_path.split('.')[-1]
audio.export(out_path, format=fmt)
print(f"已转换:{in_path} -> {out_path}")
# 示例:wav 转 mp3
convert("sample.wav", "sample.mp3")
小提示:pydub 本身只做封装,真正的解码靠 ffmpeg。Windows 若不想配环境变量,可在代码里写 AudioSegment.converter = r"C:\ffmpeg\bin\ffmpeg.exe" 指定路径;批量转换时把 convert 放进遍历文件夹的循环即可。
2. 批量给图片加白边框(证件照 / 商品图风格)
发图前想统一留白、做成带边框的展示图,Pillow 的 ImageOps.expand 一行搞定,胶卷感立马出来。
(需 pip install pillow)
from PIL import Image, ImageOps
import os
defadd_frame(path, out_dir, border=40):
img = Image.open(path).convert("RGB")
framed = ImageOps.expand(img, border=border, fill="white")
name = os.path.basename(path)
framed.save(os.path.join(out_dir, name))
print("已加框:", name)
for f in os.listdir("photos"):
if f.lower().endswith((".jpg", ".png")):
add_frame(f"photos/{f}", "framed")
小提示:border 是边框像素宽度,越大留白越多;若想要圆角效果,可再用一张圆角蒙版做合成。输出目录记得提前建好,否则保存会报错。
3. 日志文件分析器(零依赖,统计报错级别)
服务器或程序跑完留下一长串日志,肉眼翻太累。用正则配合 collections.Counter,几行就能数出各级别出现次数,定位问题更快。
(Python 标准库,无需安装)
import re
from collections import Counter
defanalyze(log_path):
levels = Counter()
with open(log_path, encoding="utf-8") as f:
for line in f:
m = re.search(r"\b(ERROR|WARN|INFO|DEBUG)\b", line)
if m:
levels[m.group(1)] += 1
print("日志级别统计:")
for k, v in levels.most_common():
print(f" {k}: {v}")
# analyze("app.log")
小提示:正则按你自己的日志格式调整,例如加上时间戳提取;想看「报错最多的前十条内容」,可以把 Counter 换成对整行报错信息的计数。
4. 系统硬件信息一览(一键看电脑配置)
帮人远程排查、或者写装机清单时,与其手动翻「此电脑」,不如用脚本把系统、CPU、内存、磁盘一口气打印出来。
(需 pip install psutil)
import platform
import psutil
defsys_info():
print("系统:", platform.system(), platform.release())
print("CPU:", platform.processor(), psutil.cpu_count(logical=True), "核")
print("内存:", round(psutil.virtual_memory().total / 1024**3, 1), "GB")
print("磁盘:", round(psutil.disk_usage('/').total / 1024**3, 1), "GB")
sys_info()
小提示:psutil 跨平台;Windows 下磁盘路径应改成 'C:\\'。想看实时占用,可把 virtual_memory().percent 放进循环定时打印,做一个迷你监控。
5. 多张 Excel 合并成一张(同结构表一键汇总)
每月收到的分表、各部门的明细,手动复制粘贴既慢又易错。用 openpyxl 把多个工作簿的活动表逐行追加到同一个文件,汇总只要几秒。
(需 pip install openpyxl)
import openpyxl
defmerge_sheets(files, out="merged.xlsx"):
out_wb = openpyxl.Workbook()
out_ws = out_wb.active
for f in files:
wb = openpyxl.load_workbook(f)
ws = wb.active
for row in ws.iter_rows(values_only=True):
out_ws.append(row)
out_wb.save(out)
print("已合并", len(files), "个文件 ->", out)
# merge_sheets(["a.xlsx", "b.xlsx", "c.xlsx"])
小提示:默认合并每个文件的活动表(第一个工作表);若每个文件都有表头,记得跳过除第一个以外的表头行,否则汇总后会出现重复标题。
6. 图片批量旋转修正(手机竖拍横放一键转正)
手机拍的照片偶尔方向不对,或者扫描件需要统一横竖,Pillow 批量旋转最省事,配合 expand=True 还能避免内容被裁掉。
(需 pip install pillow)
from PIL import Image
import os
defrotate_all(folder, angle=90):
for f in os.listdir(folder):
if f.lower().endswith((".jpg", ".png")):
img = Image.open(f"{folder}/{f}")
img.rotate(angle, expand=True).save(f"{folder}/rot_{f}")
print("已旋转:", f)
# rotate_all("photos", angle=90)
小提示:手机竖拍横放是常见问题,更稳妥的做法是用 ImageOps.exif_transpose(img) 按照片自带的 EXIF 方向信息自动转正,不用手动指定角度。
7. 本地双人聊天室(标准库 socket,零依赖)
想体验网络编程、或者同一台机器上两个窗口对聊做演示,用 Python 标准库的 socket 加一点多线程就能搭起来,不需要任何第三方包。
(Python 标准库,无需安装)
服务端:
import socket, threading
defserver(host="0.0.0.0", port=9000):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
s.listen()
print("聊天室已开启,等待连接...")
clients = []
defhandle(c):
whileTrue:
try:
msg = c.recv(1024).decode()
for x in clients:
x.send(msg.encode())
except:
clients.remove(c)
break
whileTrue:
c, _ = s.accept()
clients.append(c)
threading.Thread(target=handle, args=(c,)).start()
# server()
客户端:
import socket
c = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
c.connect(("127.0.0.1", 9000))
whileTrue:
c.send(input("我: ").encode())
print("对方:", c.recv(1024).decode())
小提示:这是本机或局域网内的演示型程序,公网部署需要额外做鉴权与防火墙配置;端口若被占用,把 9000 换一个即可。
8. 用 matplotlib 把数据画成图表(折线 / 柱状)
汇报时贴一张图胜过列一串数字。matplotlib 是绘图基础库,折线图和柱状图几行就能出图,保存成图片直接放进文档或幻灯片。
(需 pip install matplotlib)
import matplotlib.pyplot as plt
defchart(x, y, title="示例", kind="bar"):
plt.figure(figsize=(7, 4))
if kind == "bar":
plt.bar(x, y)
else:
plt.plot(x, y, marker="o")
plt.title(title)
plt.savefig("chart.png", dpi=120)
print("图表已保存 chart.png")
# chart(["一月", "二月", "三月"], [120, 200, 175])
小提示:Windows 下中文标题容易显示成方块,加一句 plt.rcParams['font.sans-serif'] = ['SimHei'] 即可正常显示;dpi 越高图片越清晰,文件也越大。
这 8 个脚本横跨音频、图像、文本、系统、办公、网络、可视化七个方向,胜在「小而全」——单个文件就能解决一类具体问题。挑两个最顺手的先跑通,再照着改参数适配你的场景,慢慢地,电脑里就会攒出一套只属于你的效率工具箱。
Python 卡在「学完不知道用来干嘛」。下面 6 个脚本选的都是能立刻上手、立刻省事的场景:批量生成验证码图片、对比两个文件夹的差异、把 PDF 拆成图片、用代码放音乐、给命令行加上进度条和颜色、批量处理压缩包。代码短、依赖清晰,复制回去改改路径就能跑。
1. 批量生成验证码图片
做测试、教学演示经常需要一批带噪点的验证码图。用 Pillow 几行就能生成,文字随机、噪点随机。
(需 pip install pillow)
from PIL import Image, ImageDraw, ImageFontimport random, stringdefgen_captcha(text=None, out="captcha.png", w=120, h=40): text = text or"".join(random.choices(string.ascii_uppercase + string.digits, k=4)) img = Image.new("RGB", (w, h), (240, 240, 240)) draw = ImageDraw.Draw(img) font = ImageFont.load_default() draw.text((10, 10), text, fill=(20, 20, 20), font=font)for _ in range(60): # 加噪点,干扰机器识别 draw.point((random.randint(0, w), random.randint(0, h)), fill=(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))) img.save(out)return textprint("验证码内容:", gen_captcha())
小提示:想批量出图,循环调用并换文件名即可;load_default 字体偏素,可换成系统字体路径提升观感。
2. 对比两个文件夹的差异
改了一版代码或文档,想快速知道哪份是旧的、哪份被改过,用 filecmp 比对目录最省心,标准库就能做。
(标准库,无需安装)
import filecmp, osdefdiff_folders(a, b): left = set(os.listdir(a)) right = set(os.listdir(b)) print("仅在", a, "中:", left - right) print("仅在", b, "中:", right - left)for name in left & right: pa, pb = os.path.join(a, name), os.path.join(b, name)if os.path.isfile(pa) and os.path.isfile(pb):ifnot filecmp.cmp(pa, pb, shallow=False): print("内容不同:", name)diff_folders("v1", "v2")
小提示:shallow=False 会比对真实字节;两套目录结构一致时输出最直观,适合做版本核对。
3. 把 PDF 拆成图片
有些 PDF 不能直接复制文字,或者你想把某一页插进 PPT、做成配图,先把它转成图片最方便。
(需 pip install pymupdf)
import fitz, osdefpdf_to_images(pdf_path, out_dir="pages"): os.makedirs(out_dir, exist_ok=True) doc = fitz.open(pdf_path)for i, page in enumerate(doc): pix = page.get_pixmap(dpi=150) pix.save(f"{out_dir}/page_{i + 1}.png") print(f"已导出 {doc.page_count} 页到 {out_dir}/")pdf_to_images("demo.pdf")
小提示:dpi 越大越清晰也越占空间;扫描版 PDF 转图后可直接做 OCR 或插图。
4. 用代码放音乐
工作间隙想听首歌,不想被播放器弹窗打扰,写个最小播放器,一行加载、一行播放。
(需 pip install pygame)
import pygamedefplay_music(path): pygame.mixer.init() pygame.mixer.music.load(path) pygame.mixer.music.play()while pygame.mixer.music.get_busy():passplay_music("song.mp3")
小提示:pygame 适合本地 mp3 / wav 播放;若要图形界面选歌,可结合 tkinter 做文件选择框一起用。
5. 给命令行加上进度条和颜色
跑长任务时,黑底白字干等很没底。用 colorama 让进度条上色、关键步骤高亮,体验立刻不一样。
(需 pip install colorama)
from colorama import Fore, Style, initimport timeinit() # Windows 下启用颜色,必须调用一次defprogress(n):for i in range(1, n + 1): pct = i / n bar = "█" * int(pct * 30) print(f"\r{Fore.GREEN}{bar:<30}{Style.RESET_ALL}{int(pct * 100)}%", end="") time.sleep(0.1) print(f"\n{Fore.CYAN}完成{Style.RESET_ALL}")progress(20)
小提示:Fore.RED 标错误、Fore.YELLOW 标警告;Style.RESET_ALL 必须加,否则颜色会串到下一行。
6. 批量解压与打包压缩包
下载了一堆 zip,或者要把项目文件夹打成包发出去,用标准库的 zipfile 批量处理,不用装任何东西。
(标准库,无需安装)
import zipfile, os, globdefunzip_all(folder):for z in glob.glob(os.path.join(folder, "*.zip")): out = z[:-4]with zipfile.ZipFile(z) as f: f.extractall(out) print("已解压:", z)defzip_folder(folder, name=None): name = name or folder + ".zip"with zipfile.ZipFile(name, "w", zipfile.ZIP_DEFLATED) as z:for root, _, files in os.walk(folder):for f in files: p = os.path.join(root, f) z.write(p, os.path.relpath(p, folder)) print("已打包:", name)unzip_all("downloads")# zip_folder("project")
小提示:extractall 会覆盖同名文件,解压前确认目标目录为空;打包大文件夹时 ZIP_DEFLATED 比默认存储更省空间。
这 6 个脚本覆盖了图像生成、文件比对、文档转换、媒体播放、命令行体验和压缩包处理几个方向。挑一个你当下最需要的先跑,把示例路径换成自己的,它就成了顺手的专属工具。