网易首页 > 网易号 > 正文 申请入驻

7个小Python脚本,每周节省我几个小时

0
分享至

2025年是自动化的时代。每个人都在讨论如何使用像n8n、Zapier、Huginn或Make这样的工具来自动化某些事情。但大家常常忽视了,使用老旧的Python其实也能轻松自动化几乎任何事情(真的)。我在Mac和Windows上运行一些小脚本,处理那些通常要花费我一周数小时的任务,真的是因为它们,我节省了不少时间。

清理收件箱的杂乱
当你不想处理所有这些杂乱时

这个小脚本通过IMAP连接到你的邮箱,帮你处理那些删除或归档不再需要的邮件的繁琐工作。你可以告诉它查找超过一定天数的未读邮件,它会悄悄地将它们移动到你的归档中,这样你的收件箱就会感觉轻松一些。

如果你每天收到成百上千封促销邮件,又不想一个个去清理,这个脚本就特别好用。由于它通过IMAP运行,因此在大多数电子邮件提供商中都能以相同的方式工作。

#!/usr/bin/env python3

clean_inbox.py

归档或删除超过N天的符合简单条件的邮件。

用法:

python clean_inbox.py your-email@example.com app-password --days 30 --archive

import imaplib, email, sys, argparse, datetime

parser = argparse.ArgumentParser()

parser.add_argument('email')

parser.add_argument('password')

parser.add_argument('--imap', default='imap.gmail.com')

parser.add_argument('--days', type=int, default=30)

parser.add_argument('--archive', action='store_true', help='移动到[Gmail]/所有邮件(Gmail)')

parser.add_argument('--delete', action='store_true', help='删除而不是归档')

args = parser.parse_args()

cutoff = (datetime.datetime.utcnow() - datetime.timedelta(days=args.days)).strftime("%d-%b-%Y")

M = imaplib.IMAP4_SSL(args.imap)

M.login(args.email, args.password)

M.select("INBOX")

typ, data = M.search(None, '(BEFORE "{}")'.format(cutoff))

ids = data[0].split()

print(f"找到 {len(ids)} 条在 {cutoff} 之前的邮件")

if not ids:

M.logout(); sys.exit()

if args.delete:

for i in ids: M.store(i, '+FLAGS', '\\Deleted')

M.expunge()

print("已删除邮件。")

elif args.archive:

# Gmail 特殊:通过复制然后从收件箱删除来移动到所有邮件

for i in ids:

M.copy(i, '[Gmail]/All Mail')

M.store(i, '+FLAGS', '\\Deleted')

M.expunge()

print("已归档邮件。")

else:

print("没有指定操作。请使用 --archive 或 --delete。")

M.logout()

备份文件到云存储
当你有分散的文件时节省时间

这个脚本给你提供了一个简单的方法,可以把文件上传到任何兼容S3的存储服务。当你有很多分散的文件想要从电脑上移走,或者需要快速备份工作文档、PDF或截图时,它能帮你节省时间。

这个脚本只专注于上传,保持了简洁,这让它非常适合每天或每周的备份。如果你喜欢 Wasabi 或 DigitalOcean Spaces 这样的服务,它也能正常使用,因为它采用了相同的 S3 操作方式。

#!/usr/bin/env python3

s3_backup.py

将本地文件夹同步到 S3 存储桶(上传新文件或已更改的文件)。

用法:

export AWS_ACCESS_KEY_ID=...

export AWS_SECRET_ACCESS_KEY=...

python s3_backup.py /path/to/folder bucket-name prefix

import boto3, os, sys, hashlib

from pathlib import Path

local = Path(sys.argv[1])

bucket = sys.argv[2]

prefix = sys.argv[3] if len(sys.argv) > 3 else ''

s3 = boto3.client('s3')

def md5(path):

h=hashlib.md5()

with open(path,'rb') as f:

for chunk in iter(lambda: f.read(8192), b''): h.update(chunk)

return h.hexdigest()

for p in local.rglob('*'):

if p.is_file():

key = (prefix + '/' + str(p.relative_to(local))).lstrip('/')

# 快速检查:比较文件大小;如果大小相同且没有检查 etag,就跳过

s3.upload_file(str(p), bucket, key)

print("已上传", key)

排序截图
因为我们都有太多截图

截图往往分散在您的系统中,例如桌面和下载文件夹。该脚本找到它们,通过常见的命名模式识别它们,并将它们移动到一个按日期排序的单一整洁目标文件夹中。我再也不用到处找之前拍的截图了,因为所有的截图都整齐地放在一个干净的文件夹里。

您还可以使用干运行(dry run)模式,在允许任何更改之前显示将要移动的内容。它运行得很快,适合任何平台,是个能立刻让你的系统感觉不那么杂乱的小工具。如果你工作中拍了很多截图,这个脚本能帮你省下好几个小时的搜索和整理时间。

#!/usr/bin/env python3

screenshot_sorter.py

用法:

python screenshot_sorter.py --src ~/Downloads --src ~/Desktop --dest ~/Pictures/Screenshots --dry-run

import argparse, shutil, re

from pathlib import Path

from datetime import datetime

p = argparse.ArgumentParser()

p.add_argument('--src', action='append', default=[str(Path.home() / 'Downloads'), str(Path.home() / 'Desktop')])

p.add_argument('--dest', default=str(Path.home() / 'Pictures' / 'Screenshots'))

p.add_argument('--dry-run', action='store_true')

p.add_argument('--days', type=int, default=365)

args = p.parse_args()

patterns = re.compile(r'screen(sho?t)?t|screenshot|スクリーンショット|截圖', re.I)

exts = {'.png','.jpg','.jpeg','.webp','.bmp','.tiff'}

for s in args.src:

for f in Path(s).rglob('*'):

if f.is_file() and f.suffix.lower() in exts and patterns.search(f.name):

mtime = datetime.fromtimestamp(f.stat().st_mtime)

destdir = Path(args.dest) / mtime.strftime('%Y-%m-%d')

destdir.mkdir(parents=True, exist_ok=True)

target = destdir / f.name

if args.dry_run:

print("测试运行", f, "->", target)

else:

i = 1

while target.exists():

target = destdir / (f.stem + f"_{i}" + f.suffix)

i += 1

shutil.move(str(f), str(target))

print("移动", f, "->", target)

批量重命名文件
手动重命名文件非常麻烦

这个脚本提供了两种选择。你可以使用与原始名称部分相匹配的模式来重命名文件,或者你可以简单地使用简单的序列重命名所有文件。这是一个解决方案,适合用来清理照片文件夹、重新整理项目文件或修复不一致的文件名。因为它使用了正则表达式,你可以根据需要进行复杂的操作,也可以选择简单使用。

#!/usr/bin/env python3

bulk_rename.py

示例:

python bulk_rename.py /path/to/folder --pattern "IMG_(\d+)" --replace "photo_\\1" --ext .jpg

或者使用简单的序列:

python bulk_rename.py /path/to/folder --seq "photo" --ext .png

导入模块:

import argparse, re

from pathlib import Path

ap = argparse.ArgumentParser()

ap.add_argument('folder')

ap.add_argument('--pattern')

ap.add_argument('--replace')

ap.add_argument('--seq')

ap.add_argument('--ext', default='')

args = ap.parse_args()

folder = Path(args.folder)

如果提供了模式和替换参数:

rx = re.compile(args.pattern)

for f in folder.iterdir():

如果 f 是文件:

m = rx.search(f.name)

如果 m:

new = rx.sub(args.replace, f.name)

f.rename(folder / new)

print("重命名为", f.name, "->", new)

elif args.seq:

i = 1

对于 sorted(folder.iterdir()) 中的每个 f:

如果 f 是文件:

ext = args.ext or f.suffix

new = f"{args.seq}_{i}{ext}"

f.rename(folder / new)

print("重命名为", f.name, "->", new)

i += 1

else:

print("没有任何操作。请提供 --pattern/--replace 或 --seq 参数。")

整理文件和文件夹
给你的文件整理一下

这个脚本检查文件夹中的每个文件,并根据其扩展名将其移动到匹配的类别中。图片放入图片文件夹,文档放入文档文件夹,电子表格移动到电子表格文件夹,等等。任何不匹配的文件都会被放入其他文件夹。这个脚本非常适合用来清理杂乱的下载文件夹,或者为长期存储整理目录。只需一个小命令,就能帮你整理文件,不用手动拖来拖去。

#!/usr/bin/env python3

arrange_it.py

使用方法:

python arrange_it.py /path/to/folder

import sys

from pathlib import Path

mapping = {

'Images': {'.png','.jpg','.jpeg','.gif','.webp','.bmp','.tiff'},

'Docs': {'.pdf','.docx','.doc','.txt','.md','.odt','.rtf'},

'Spreadsheets': {'.xls','.xlsx','.csv'},

'Archives': {'.zip','.tar','.gz','.rar','.7z'},

'Scripts': {'.py','.sh','.js','.ps1'},

'Videos': {'.mp4','.mkv','.mov','.webm','.avi'}

root = Path(sys.argv[1] if len(sys.argv)>1 else '.').expanduser()

for f in root.iterdir():

如果 f 是文件:

moved=False

对于 folder, exts 在 mapping.items():

如果 f.suffix.lower() in exts:

dest = root / folder

dest.mkdir(exist_ok=True) # 创建目标文件夹,如果已存在则不报错

目标路径 = 目标路径 / f.name

i=1

当目标文件存在时:

目标路径 = 目标路径 / (f.stem + f"_"+str(i) + f.suffix)

i += 1

f.replace(目标路径)

print("移动了", f.name, "->", 目标路径.name + '/' + f.name)

已移动 = True

break

如果没有移动任何文件:

目标文件夹 = 根 / '其他'

目标文件夹.mkdir(exist_ok=True)

f.replace(目标文件夹 / f.name)

print("移动了", f.name, "-> 其他/" + f.name)

把剪贴板内容保存为文本文件
一切都以纯文本格式保存

如果你在一天中复制了很多文本,你可能会失去对重要片段的追踪。这个脚本会监控你的剪贴板,把每个新复制的内容保存到每日的文本文件中。它让你可以回去找到你之前复制的任何内容,无论是笔记、链接还是一段代码。这个想法是为你提供一个简单的个人剪贴板历史记录,而不需要使用复杂的剪贴板管理器。一切都以纯文本保存在一个你可以同步或归档的文件夹中。对于作家、开发者和研究人员来说,它成为一个安静的助手,帮助你恢复那些你通常会丢失的东西。

#!/usr/bin/env python3

clip_save.py

在终端中运行,或作为后台进程执行。它会把新的剪贴板内容追加到每日的文件中。

用法:

python clip_save.py

import time, os

from datetime import datetime

import pyperclip

输出 = os.path.expanduser('~/clipboard_history')

os.makedirs(输出, exist_ok=True)

最后 = None

while True:

尝试:

txt = pyperclip.paste()

except Exception:

txt = ''

如果 txt 并且 txt != 最后:

最后 = txt

fn = os.path.join(输出, datetime.now().strftime('%Y-%m-%d') + '.txt')

with open(fn, 'a', encoding='utf-8') as f:

f.write(f"\n\n[{datetime.now().isoformat()}]\n{txt}\n")

print("保存到", fn)

time.sleep(1.5)

Python 易于学习

学习 Python 非常简单,只要你掌握了基础, 它可以成为你作为 PC 用户的真正改变者。你可以用它来自动化工作流程中的某些部分,或者将其插入到你已经使用的应用程序中,使它们更强大。例如,你甚至可以 通过引入 Python 来提升你在 Excel 中的生产力。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
解放:马步芳以为八万骑兵无敌,彭总近百挺机枪出击,时代变了

解放:马步芳以为八万骑兵无敌,彭总近百挺机枪出击,时代变了

王嚾晓
2026-02-23 18:01:59
国内飞三亚跌至最低200元

国内飞三亚跌至最低200元

第一财经资讯
2026-02-24 13:38:37
花生立大功!浙江大学研究:每天吃够量,可以延缓衰老30%

花生立大功!浙江大学研究:每天吃够量,可以延缓衰老30%

番茄健康
2026-02-23 21:05:16
终结队史最长16连败!国王拒灰熊四杀 威少25+7引7人上双

终结队史最长16连败!国王拒灰熊四杀 威少25+7引7人上双

醉卧浮生
2026-02-24 11:24:35
继张本智和反华拜鬼,被官媒点名后,石川佳纯也走上了他的老路

继张本智和反华拜鬼,被官媒点名后,石川佳纯也走上了他的老路

姩姩有娱
2026-02-23 18:09:28
NBA巨星库里“乱穿鞋”时代或将终结?知情人士:安踏CEO亲自出马,合作可能性高

NBA巨星库里“乱穿鞋”时代或将终结?知情人士:安踏CEO亲自出马,合作可能性高

每日经济新闻
2026-02-24 18:25:08
春节档较去年下滑40%

春节档较去年下滑40%

犀牛娱乐
2026-02-24 15:26:50
汪小菲三胎正面曝光,和大S儿女刚出生太像,马筱梅产房环境破旧

汪小菲三胎正面曝光,和大S儿女刚出生太像,马筱梅产房环境破旧

古希腊掌管月桂的神
2026-02-24 16:10:33
拉夫罗夫:莫斯科将把所有历史上的俄罗斯土地归还其合法家园

拉夫罗夫:莫斯科将把所有历史上的俄罗斯土地归还其合法家园

番茄说史聊
2026-02-22 14:07:52
A股:今天上冲到4131后回落,种种迹象表明,明天或出现巨变大行情

A股:今天上冲到4131后回落,种种迹象表明,明天或出现巨变大行情

股市皆大事
2026-02-24 16:08:16
新加坡大满贯赛:世界亚军被淘汰!0:3不敌伊藤美诚,孙颖莎3:1

新加坡大满贯赛:世界亚军被淘汰!0:3不敌伊藤美诚,孙颖莎3:1

国乒二三事
2026-02-24 10:52:30
在国安局食堂吃饭时,无意发现打菜的师傅,竟是我追踪的千面间谍

在国安局食堂吃饭时,无意发现打菜的师傅,竟是我追踪的千面间谍

千秋文化
2026-02-19 10:43:29
雅阁官降10万仍被吐槽 广汽本田降价为何打动不了消费者?

雅阁官降10万仍被吐槽 广汽本田降价为何打动不了消费者?

BigCarShow
2026-02-23 23:44:11
“第一软饭男”去世,伺候美国老妇13年,继承268亿,死后钱给谁

“第一软饭男”去世,伺候美国老妇13年,继承268亿,死后钱给谁

来科点谱
2026-02-23 07:04:53
成都一小区晚上发生火灾,街道办:2人轻伤,原因正调查

成都一小区晚上发生火灾,街道办:2人轻伤,原因正调查

极目新闻
2026-02-24 15:48:30
你经历过道德绑架吗?网友:事实证明没有道德就不会被绑架

你经历过道德绑架吗?网友:事实证明没有道德就不会被绑架

带你感受人间冷暖
2026-02-21 19:12:24
融创董事长孙宏斌去年就称“最困难的时候已经过去了” 今年照样被执行案追着

融创董事长孙宏斌去年就称“最困难的时候已经过去了” 今年照样被执行案追着

新浪财经
2026-02-24 11:08:04
李亚鹏年初六到陈光标家做客!为陈光标儿子送行,其妻子罕见露脸

李亚鹏年初六到陈光标家做客!为陈光标儿子送行,其妻子罕见露脸

少女的烦恼
2026-02-23 21:27:26
雷军回应新一代SU7赤霞红配色:一台值得期待的Dream Car

雷军回应新一代SU7赤霞红配色:一台值得期待的Dream Car

PChome电脑之家
2026-02-24 10:29:31
法官问为何不交物业费,业主反问:不交税违法,不交费违法吗

法官问为何不交物业费,业主反问:不交税违法,不交费违法吗

蜉蝣说
2026-02-03 16:31:54
2026-02-24 19:12:49
生活魔术专家
生活魔术专家
里是「生活百科全书」,汇集了独特的生活小妙招和所见所得,让你轻松发现生活的美好与智慧
650文章数 5608关注度
往期回顾 全部

科技要闻

AI颠覆发展最新牺牲品!IBM跳水重挫超13%

头条要闻

特朗普称3月31日访华并赞叹中国仪仗队 外交部回应

头条要闻

特朗普称3月31日访华并赞叹中国仪仗队 外交部回应

体育要闻

苏翊鸣总结米兰征程:我仍是那个热爱单板滑雪的少年

娱乐要闻

汪小菲官宣三胎出生:承诺会照顾好3个孩子

财经要闻

县城消费「限时繁荣」了十天

汽车要闻

入门即满配 威兰达AIR版上市 13.78万元起

态度原创

旅游
艺术
健康
亲子
公开课

旅游要闻

海南2026年春节假期接待游客超1232万人次

艺术要闻

2025年第八届全国青年美展 | 油画作品选刊

转头就晕的耳石症,能开车上班吗?

亲子要闻

你5岁会做饭了吗?看看5岁小孩哥如何准备一家人的晚餐

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版