当前位置:首页>python>同事问我为什么工作效率这么高:6个Python脚本,承包了我的工作日常

同事问我为什么工作效率这么高:6个Python脚本,承包了我的工作日常

  • 2026-10-11 06:58:56
同事问我为什么工作效率这么高:6个Python脚本,承包了我的工作日常

很多人把 Python 当成写算法题、做数据的工具,其实它最实用的场景,是替你处理那些零碎、重复、做了又忘的琐事。下面这 6 个脚本,每一个都瞄准一个具体问题:有的把图片变成字符画,有的把一堆图合成动图,有的帮你揪出硬盘里最占空间的文件。代码都不长,依赖也都是常见库,复制回去稍作修改就能直接运行。

1. 把任意图片变成字符画

发朋友圈总用千篇一律的滤镜,不如用代码把照片转成由字符组成的画。原理很简单:先把图片压成灰度小图,再把每个像素的亮度映射成一个字符,越暗用越密的字符。纯本地运行,不依赖任何外部服务。

(需 pip install pillow)

from PIL import Image

ASCII_CHARS = "@%#*+=-:. "# 从深到浅排列

defimg_to_ascii(path, width=100):
    img = Image.open(path).convert("L")        # 转灰度
    w, h = img.size
    new_h = int(h * width / w / 2)             # /2 补偿字符高宽比
    img = img.resize((width, new_h))
    pixels = img.getdata()
    lines = []
for i, p in enumerate(pixels):
        ch = ASCII_CHARS[p * (len(ASCII_CHARS) - 1) // 255]
        lines.append(ch)
if (i + 1) % width == 0:
            lines.append("\n")
return"".join(lines)

art = img_to_ascii("photo.jpg", width=100)
print(art)
with open("ascii_art.txt", "w", encoding="utf-8") as f:
    f.write(art)

小提示:width 越大字符画越精细,ASCII_CHARS 可以换成你喜欢的字符集。在等宽字体下观看效果最好,直接复制进终端或记事本就能展示。

2. 多张图片合成一个 GIF 动图

做教程、记录步骤、做个小表情包,经常需要把一系列静态图拼成动图。用 Pillow 几行就能搞定,还能统一尺寸、控制每帧时长。

(需 pip install pillow)

import os
from PIL import Image

defmake_gif(folder, output="out.gif", duration=500, size=(600, 600)):
    files = sorted(
        f for f in os.listdir(folder)
if f.lower().endswith((".png", ".jpg", ".jpeg"))
    )
    frames = [
        Image.open(os.path.join(folder, f)).convert("RGB").resize(size)
for f in files
    ]
    frames[0].save(
        output,
        save_all=True,
        append_images=frames[1:],
        duration=duration,   # 每帧毫秒
        loop=0,              # 0 表示无限循环
    )
    print(f"已生成 {output},共 {len(frames)} 帧")

make_gif("frames", output="demo.gif", duration=400)

小提示:duration 越小动图越快;size 建议统一,否则生成的 GIF 会错位。图片命名按数字顺序排好,合成后帧序才正确。

3. 文件夹空间侦探:揪出最占硬盘的文件

电脑越用越卡,往往是某几个大文件在悄悄吃空间。这个脚本扫描指定目录,按体积从大到小排出前 N 个文件,一眼看清是谁在占地方。零依赖,标准库即可。

import os

defhuman(size):
for unit in ["B", "KB", "MB", "GB"]:
if size < 1024:
returnf"{size:.2f}{unit}"
        size /= 1024
returnf"{size:.2f} TB"

defspace_detective(folder, top=10):
    data = []
for root, _, files in os.walk(folder):
for name in files:
            p = os.path.join(root, name)
try:
                data.append((os.path.getsize(p), p))
except OSError:
pass
    data.sort(reverse=True)
for size, p in data[:top]:
        print(f"{human(size):>12}{p}")

space_detective("D:/Downloads", top=10)

小提示:把路径换成你最常塞东西的目录(如下载、桌面、文档目录);top 控制显示前几名。扫描整块磁盘可能较慢,建议先针对单个文件夹使用。

4. 批量提取 PDF 里的文字

收藏了一堆 PDF 资料,想检索里面的内容却搜不到?把文字提取出来存成 txt,就能用任意编辑器全文搜索。单个文件和整个文件夹批量处理都支持。

(需 pip install pypdf)

import os
from pypdf import PdfReader

defpdf_to_text(pdf_path, out_dir="txt_out"):
    os.makedirs(out_dir, exist_ok=True)
    reader = PdfReader(pdf_path)
    text = "\n".join(page.extract_text() or""for page in reader.pages)
    out = os.path.join(out_dir, os.path.splitext(os.path.basename(pdf_path))[0] + ".txt")
with open(out, "w", encoding="utf-8") as f:
        f.write(text)
    print(f"已提取 {len(reader.pages)} 页 -> {out}")

defbatch_pdf(folder):
for f in os.listdir(folder):
if f.lower().endswith(".pdf"):
            pdf_to_text(os.path.join(folder, f))

batch_pdf("pdfs")

小提示:扫描件(图片型 PDF)提取不出文字,需要先做 OCR;out_dir 默认建在原 PDF 同级的 txt_out 文件夹,方便对照。

5. CSV 一键转成 Excel 表格

导出的报表常常是 CSV,用记事本打开一团乱,发给同事也不够正式。一段代码把 CSV 转成规整的 Excel,还能顺手处理中文乱码问题(utf-8-sig 是关键)。

(需 pip install openpyxl)

import csv
from openpyxl import Workbook

defcsv_to_xlsx(csv_path, xlsx_path=None):
    xlsx_path = xlsx_path or csv_path[:-4] + ".xlsx"
    wb = Workbook()
    ws = wb.active
with open(csv_path, newline="", encoding="utf-8-sig") as f:
for row in csv.reader(f):
            ws.append(row)
    wb.save(xlsx_path)
    print(f"已转换 -> {xlsx_path}")

csv_to_xlsx("data.csv")

小提示:utf-8-sig 编码能保证 Excel 正确识别中文,别写成纯 utf-8;表头会作为第一行原样写入。想给多张 CSV 批量转,套一层文件夹遍历即可。

6. 终端跑马灯:用代码做文字动画

命令行工具也能有仪式感。这段脚本让一行文字在终端里来回滚动,像老式电子屏的跑马灯,用来做提醒、做演示都挺有意思。纯标准库,不需要安装任何东西。

import sys
import time

defmarquee(text, width=40, rounds=3, speed=0.12):
    pad = " " * width
    line = pad + text + pad
for _ in range(rounds):
for i in range(len(line) - width + 1):
            sys.stdout.write("\r" + line[i:i + width])
            sys.stdout.flush()
            time.sleep(speed)
    print()

marquee("  喝水 · 伸懒腰 · 眨眨眼 · 起来走两步  ")

小提示:width 是显示窗口宽度,speed 越小滚得越慢,rounds 控制循环次数。文字里可以换成你的待办或提醒,放在脚本开头当欢迎语也合适。


这 6 个脚本覆盖了图像创意、文件管理、文档提取、表格转换和命令行交互几个常见场景。它们共同的优点是「短」和「稳」——不用配置环境、不连外部服务、不涉及账号授权,改改路径就能用。挑一个最贴近你日常工作的先跑起来,把它存成 .py 文件,它就是属于你自己的效率工具。

最新文章

随机文章