日常工作里,大量时间耗在"重复、机械、可预期"的小事上:找一份文档、把笔记发出去、久坐忘了休息、给图片加水印……这些事不需要聪明,只需要有人替你按时按点做。下面这 7 个 Python 脚本,代码完整、依赖常见,复制回去改改路径就能跑,把琐事一次性自动化。
每个脚本都遵循同一个结构:先说它能解决什么,再给完整代码,最后附一句实用提示。建议挑最戳你的那一两个先跑起来,比一次性全装更有成就感。
系统自带的搜索经常找不到内容,用 whoosh 给指定文件夹建索引,之后输入关键词就能列出所有命中文件。配合 jieba 中文分词,中文搜索也准确。
(需 pip install whoosh jieba)
from whoosh.index import create_in, open_dir
from whoosh.fields import Schema, TEXT, ID
from whoosh.qparser import QueryParser
from jieba.analyse import ChineseAnalyzer
import os
defbuild_index(folder="docs", indexdir="index"):
ifnot os.path.exists(indexdir):
os.mkdir(indexdir)
schema = Schema(path=ID(stored=True), content=TEXT(analyzer=ChineseAnalyzer()))
ix = create_in(indexdir, schema)
writer = ix.writer()
for root, _, files in os.walk(folder):
for f in files:
if f.endswith((".txt", ".md")):
p = os.path.join(root, f)
with open(p, encoding="utf-8", errors="ignore") as fp:
writer.add_document(path=p, content=fp.read())
writer.commit()
defsearch(q, indexdir="index", top=10):
ix = open_dir(indexdir)
with ix.searcher() as s:
for r in s.search(QueryParser("content", ix.schema).parse(q), limit=top):
print(r["path"])
build_index("docs") # 首次建索引
search("Python 教程") # 之后随时搜
小提示:索引只读取 .txt / .md,要搜 PDF、Word 需先提取文本;文件较多时首次建索引会稍慢,属正常现象,之后搜索都是秒回。
写好的多篇 Markdown 笔记,用 markdown 库转成带样式的 HTML,自动合并、加好排版,发给别人直接就是个干净页面,不用对方装任何软件。
(需 pip install markdown)
import markdown, glob
CSS = """
body{max-width:760px;margin:40px auto;padding:0 20px;
font-family:-apple-system,"Microsoft YaHei",sans-serif;line-height:1.8;color:#222}
pre{background:#f6f8fa;padding:16px;border-radius:6px;overflow:auto}
code{font-family:Consolas,Menlo,monospace}
h1{border-bottom:2px solid #eee;padding-bottom:8px}
"""
defbuild(book_dir, out="notebook.html"):
parts = []
for f in sorted(glob.glob(f"{book_dir}/*.md")):
with open(f, encoding="utf-8") as fp:
parts.append(markdown.markdown(
fp.read(), extensions=["fenced_code", "tables"]))
html = f"<html><head><meta charset='utf-8'><style>{CSS}</style></head><body>" \
+ "".join(parts) + "</body></html>"
with open(out, "w", encoding="utf-8") as fp:
fp.write(html)
return out
build("notes", "notebook.html")
小提示:CSS 已内置基础排版,想换字体或配色,直接改 CSS 字符串即可;extensions 还支持 toc 自动生成目录,长文档尤其好用。
长时间盯屏幕伤眼,用 tkinter 做个常驻提醒:每隔设定分钟弹出一个小窗,提示看远处休息,5 秒后自动消失。tkinter 是 Python 自带,零额外安装。
import tkinter as tk
import threading, time
def_popup():
root = tk.Tk()
root.title("护眼提醒")
root.geometry("320x120")
root.resizable(False, False)
tk.Label(root, text="该休息啦,看远处 20 秒 👀",
font=("Microsoft YaHei", 14)).pack(expand=True)
root.after(5000, root.destroy)
root.mainloop()
defremind(interval=20):
whileTrue:
time.sleep(interval * 60)
threading.Thread(target=_popup).start()
# remind(20) # 每 20 分钟提醒一次,取消注释后运行
小提示:弹窗用独立线程触发,脚本可一直挂在后台;想开机自动运行,把脚本快捷方式放进系统"启动"目录即可。
不用 U 盘、不用网盘,Python 自带的 http.server 一行就能把任意文件夹变成网页,同一 WiFi 下的手机、电脑直接访问下载。零依赖、不联网外传,文件始终在你自己机器上。
import http.server, socketserver, os
defshare(folder=".", port=8000):
os.chdir(folder)
handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", port), handler) as httpd:
print(f"已在 http://本机IP:{port} 启动,同一 WiFi 设备可访问")
httpd.serve_forever()
# share(".", 8000) # 分享当前文件夹,端口 8000
小提示:服务仅监听本机端口,文件不经过任何第三方;用完记得 Ctrl+C 关闭,避免端口长期暴露。手机访问时把"本机IP"换成电脑在局域网里的实际 IP(如 192.168.x.x)。
面对网页或软件的重复录入,用 pyautogui 模拟键鼠:从 CSV 读数据,自动敲字、跳格、回车,把人从机械录单里解放出来。运行前留 3 秒切到目标窗口即可。
(需 pip install pyautogui)
import pyautogui, csv, time
deffill(rows_csv="data.csv", start_delay=3):
time.sleep(start_delay) # 切到目标录入窗口
with open(rows_csv, encoding="utf-8") as f:
for name, phone in list(csv.reader(f))[1:]: # 跳过表头
pyautogui.write(name); pyautogui.press("tab")
pyautogui.write(phone); pyautogui.press("tab")
pyautogui.press("enter")
time.sleep(0.5)
# fill("data.csv")
小提示:运行前务必先手动走一遍录入流程,确认输入框顺序和代码里的 tab 节奏一致;速度可按需调大 time.sleep,首次建议调慢些观察效果。
做图、配色、仿色时常要取某个点的颜色。用 PIL 的屏幕截取配合 tkinter,按回车就能读出鼠标所在位置的颜色,十六进制和 RGB 同时给出。
(需 pip install pillow,tkinter 自带)
from PIL import ImageGrab
import tkinter as tk
defpicker():
root = tk.Tk()
root.attributes("-topmost", True)
root.geometry("260x90")
label = tk.Label(root, text="移动鼠标到目标处,按回车取色",
font=("Microsoft YaHei", 11))
label.pack(pady=12)
defsnap(event=None):
x, y = root.winfo_pointerxy()
r, g, b = ImageGrab.grab().getpixel((x, y))
label.config(text=f"#{r:02X}{g:02X}{b:02X} RGB({r},{g},{b})")
print(f"位置({x},{y}) #{r:02X}{g:02X}{b:02X}")
root.bind("<Return>", snap)
root.mainloop()
# picker()
小提示:窗口置顶显示,方便对照;读到的颜色可直接粘进设计软件或代码,做品牌色、配色方案时特别顺手。
发出去的图片最好带上署名,手动加太慢。用 Pillow 给整个文件夹的图片右下角统一盖上半透明水印,一次处理几十张。
(需 pip install pillow)
from PIL import Image, ImageDraw, ImageFont
import os, glob
defwatermark(folder="images", text="© 你的名字", out="watermarked"):
os.makedirs(out, exist_ok=True)
font = ImageFont.truetype("msyh.ttc", 28) # Windows 微软雅黑
for path in glob.glob(f"{folder}/*.jpg") + glob.glob(f"{folder}/*.png") + glob.glob(f"{folder}/*.jpeg"):
img = Image.open(path).convert("RGBA")
layer = Image.new("RGBA", img.size, (0, 0, 0, 0))
d = ImageDraw.Draw(layer)
w, h = img.size
d.text((w - 20, h - 20), text, font=font,
fill=(255, 255, 255, 140), anchor="rb")
Image.alpha_composite(img, layer).convert("RGB").save(
f"{out}/{os.path.basename(path)}")
print(f"已加水印:{os.path.basename(path)}")
# watermark("images", "© C先生")
小提示:fill 最后一位是透明度(0 全透明、255 不透明),调小更含蓄;换字体改 truetype 路径即可,Mac 可用 PingFang.ttc。
这 7 个脚本的共同点是"效果立竿见影":有的省时间(搜索、填表),有的省麻烦(笔记变网页、文件互传),有的护健康(久坐提醒),有的护原创(批量水印)。它们都不依赖复杂的运行环境,标准库加一两个常用库就能跑。挑一个顺手的先跑,改改参数,它就是你的专属小工具;等跑顺了,再慢慢把剩下的也用起来。