用 Python 写一个批量重命名文件的小工具
【摘要】 用 Python 标准库写一个批量重命名小工具:按前缀加序号重命名文件夹里的文件,默认先试运行打印新旧名字对照表,确认后再加 --apply 真正执行,并跳过目标已存在的文件。
下载文件夹里攒了一堆名字杂乱的文件,一个个改太费时间。下面这个小工具只用 Python 标准库:按指定前缀和序号批量重命名,默认先试运行,只打印新旧名字,确认无误后再加 --apply 真正执行。
完整代码
import argparse
from pathlib import Path
def plan_renames(folder: Path, prefix: str, suffix: str):
"""返回 (旧路径, 新路径) 列表,按文件名排序,序号从 1 开始。"""
files = sorted(p for p in folder.iterdir() if p.is_file())
plans = []
for index, old in enumerate(files, start=1):
ext = suffix or old.suffix
new_name = f"{prefix}{index:03d}{ext}"
plans.append((old, old.with_name(new_name)))
return plans
def main():
parser = argparse.ArgumentParser(description="批量重命名文件夹里的文件")
parser.add_argument("folder", help="目标文件夹路径")
parser.add_argument("--prefix", default="file_", help="新文件名前缀,默认 file_")
parser.add_argument("--suffix", default="", help="统一的新扩展名,如 .jpg,默认保留原扩展名")
parser.add_argument("--apply", action="store_true", help="真正执行重命名;不加则只试运行")
args = parser.parse_args()
folder = Path(args.folder)
if not folder.is_dir():
raise SystemExit(f"不是文件夹:{folder}")
plans = plan_renames(folder, args.prefix, args.suffix)
for old, new in plans:
print(f"{old.name} -> {new.name}")
if not args.apply:
print("试运行,未真正改名。确认无误后加 --apply 再执行一次。")
return
for old, new in plans:
if new.exists() and new != old:
print(f"跳过:目标已存在 {new.name}")
continue
old.rename(new)
print(f"完成,共处理 {len(plans)} 个文件。")
if __name__ == "__main__":
main()
运行示例
在 photos 文件夹里有 a.jpg、b.jpg、c.png,先试运行:
python rename_files.py photos --prefix photo_
输出:
a.jpg -> photo_001.jpg
b.jpg -> photo_002.jpg
c.png -> photo_003.png
试运行,未真正改名。确认无误后加 --apply 再执行一次。
确认名字没问题,再真正执行:
python rename_files.py photos --prefix photo_ --apply
三个注意点
- 默认不改名:不加
--apply只打印对照表,先看一遍再执行,避免改错。 - 目标已存在会跳过:新名字撞上已有文件时不覆盖,逐个提示。
- 只处理当前文件夹里的文件:不递归进子文件夹;先在副本文件夹里试一次更稳妥。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)