当前位置:首页>python>我用这 8 个 Python 脚本把日常那些零碎麻烦全收拾了:从音频转换、图片批处理到本地聊天室,一篇集齐

我用这 8 个 Python 脚本把日常那些零碎麻烦全收拾了:从音频转换、图片批处理到本地聊天室,一篇集齐

  • 2026-10-11 06:55:36
我用这 8 个 Python 脚本把日常那些零碎麻烦全收拾了:从音频转换、图片批处理到本地聊天室,一篇集齐

工具多了容易挑花眼,但真正天天能派上用场的,往往是那些解决「小、碎、烦」需求的脚本。这一篇不再局限六个,直接给你 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 个脚本覆盖了图像生成、文件比对、文档转换、媒体播放、命令行体验和压缩包处理几个方向。挑一个你当下最需要的先跑,把示例路径换成自己的,它就成了顺手的专属工具。

最新文章

随机文章