上一篇解决了搜索、笔记、互传一类的事,今天再补一批更"贴身"的小工具:随手记的便签、查天气、定时截图、生成密码、画思维导图、搭一个本地接口。它们同样代码完整、依赖常见,复制回去改改就能用,覆盖的是那些"小到不值得装软件、却又天天碰到"的需求。
下面每个保持统一结构:先说解决什么,再给完整代码,最后附一句实用提示。
1. 本地便签小工具:随手记、关了还在
脑子里闪过的待办、灵感,临时开文档太重。用 tkinter 写一个常驻便签,内容自动存进本地文件,关掉再打开还在。tkinter 是 Python 自带,零额外安装。
import tkinter as tk
import json, os
FILE = "notes.json"
defload():
return json.load(open(FILE, encoding="utf-8")) if os.path.exists(FILE) else []
defsave(notes):
json.dump(notes, open(FILE, "w", encoding="utf-8"), ensure_ascii=False, indent=2)
defapp():
root = tk.Tk()
root.title("我的便签")
root.geometry("360x420")
box = tk.Text(root, font=("Microsoft YaHei", 12))
box.pack(fill="both", expand=True, padx=8, pady=8)
box.insert("1.0", "\n".join(load()))
defon_close():
save([l for l in box.get("1.0", "end").splitlines() if l.strip()])
root.destroy()
tk.Button(root, text="保存并退出", command=on_close).pack(pady=6)
root.protocol("WM_DELETE_WINDOW", on_close)
root.mainloop()
# app()
小提示:数据存在脚本同目录的 notes.json,纯文本、可随时备份;想要多便签分栏,把 Text 换成多个 Entry 或加标签页即可扩展。
2. 天气查询:一行拿到当前温度和天气
出门前想看眼天气,不用打开 App。用 Open-Meteo 的免费接口(无需注册、无需密钥)直接取当前温度和天气代码,换成经纬度就能查任意城市。
(需 pip install requests)
import requests
defweather(lat=39.9042, lon=116.4074):
r = requests.get(
"https://api.open-meteo.com/v1/forecast",
params={
"latitude": lat,
"longitude": lon,
"current": "temperature_2m,weather_code",
"timezone": "Asia/Shanghai",
},
timeout=5,
).json()
c = r["current"]
print(f"当前温度 {c['temperature_2m']}℃,天气代码 {c['weather_code']}")
weather() # 默认北京,改 lat/lon 换城市
小提示:weather_code 是国际标准天气代码(0 晴、3 多云、61 小雨等),可对照官方文档映射成中文描述;把经纬度写成城市字典,就能做成一个多城市查询小工具。
3. 屏幕定时截图:自动留存操作过程
做教程、留证、记录屏幕变化,手动截太累。用 PIL 的屏幕截取配合定时循环,每隔设定秒数自动存一张图到本地文件夹。
(需 pip install pillow)
from PIL import ImageGrab
import time, os
defsnap_every(interval=300, out="shots"):
os.makedirs(out, exist_ok=True)
n = 1
whileTrue:
ImageGrab.grab().save(f"{out}/shot_{n:03d}.png")
print(f"已保存 shot_{n:03d}.png")
n += 1
time.sleep(interval)
# snap_every(300) # 每 5 分钟截一次
小提示:interval 单位是秒,按需调小(如 60 每分一张);图片会越积越多,建议定期清理或加日期前缀,避免占用空间。
4. 强密码生成器:一次产出多个高随机口令
注册账号还在用生日?用标准库 secrets 生成密码,随机性远强于普通 random,支持自定义长度和数量,一秒产出一批。
import secrets, string
defgen_password(length=16, count=5):
chars = string.ascii_letters + string.digits + "!@#$%^&*"
for _ in range(count):
pwd = "".join(secrets.choice(chars) for _ in range(length))
print(pwd)
gen_password(16, 5) # 生成 5 个 16 位密码
小提示:secrets 专用于安全场景,比 random 更抗预测;长度建议 12 位以上,特殊符号可按平台规则增删,避免某些网站不支持。
5. 把大纲变成思维导图:一键生成 mermaid 文本
整理读书笔记、会议纪要时,层级结构用图比文字清楚。这个脚本把一组条目转成 mermaid 思维导图代码,粘到支持 mermaid 的编辑器(如 Obsidian、部分在线工具)即可渲染成图。
defto_mindmap(items, root="主题", out="mindmap.md"):
lines = ["```mermaid", "mindmap", f" root(({root}))"]
for it in items:
lines.append(f" {it}")
lines.append("```")
text = "\n".join(lines)
open(out, "w", encoding="utf-8").write(text)
return text
to_mindmap(["第一章", "第二章", "第三章"], root="读书笔记")
小提示:条目支持再缩进一层(前面多打两个空格)就能画出分支;生成的是纯文本,可随时改、可版本管理,比手画导图好维护。
6. 本地微型接口:几行搭一个自己的 API
想让自己写的脚本能被其他程序调用,或做个简单的本地服务,用 flask 几行就能起一个接口,返回标准 JSON,方便对接前端或自动化流程。
(需 pip install flask)
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/status")
defstatus():
return jsonify(msg="服务正常", code=1)
# app.run(port=5000)
小提示:/status 只是示例,实际可接数据库、文件处理或模型推理;本地调试用 port=5000,正式部署再交给服务器,注意不要直接暴露到公网。
这 6 个脚本瞄准的是"小需求":便签管灵感、天气管出行、截图管记录、密码管安全、导图管结构、接口管扩展。它们彼此独立,缺哪个补哪个,全部跑在标准库加一两个常用库上,不需要复杂环境。把感兴趣的先跑起来,改改参数,日常效率就多一层兜底。