在日常办公或整理资料时,你是否遇到过这样的崩溃时刻:
ad3f12.jpg),想改成有序的 img_001.jpg?不需要安装任何第三方库,我们使用Python自带的 os 模块即可完成操作。
os.listdir(path): 获取指定目录下的所有文件名。os.rename(src, dst): 将文件从 src(原路径)重命名为 dst(新路径)。os.path.join(path, name): 智能拼接路径,兼容Windows和Mac系统。需求: 将乱七八糟的文件名统一修改为 前缀_序号.扩展名 的格式,例如 Photo_001.jpg。
适用场景: 摄影师整理照片、深度学习数据集预处理、壁纸库整理。
Python
import os
def batch_rename_sequence(folder_path, prefix="File", start_index=1):
# 1. 获取文件夹内所有文件
try:
files = os.listdir(folder_path)
except FileNotFoundError:
print("❌ 找不到文件夹,请检查路径!")
return
# 2. 循环处理每一个文件
# enumerate生成带索引的序列,i从0开始,所以需要+start_index
for i, filename in enumerate(files):
# 排除隐藏文件(如Mac下的.DS_Store)
if filename.startswith('.'):
continue
# 获取文件后缀名 (例如 .jpg)
file_ext = os.path.splitext(filename)[1]
# 3. 构建新名字
# :03d 表示数字补零对齐,例如 1 -> 001, 12 -> 012
new_name = f"{prefix}_{start_index + i:03d}{file_ext}"
# 4. 拼接完整路径
old_path = os.path.join(folder_path, filename)
new_path = os.path.join(folder_path, new_name)
# 5. 执行重命名
os.rename(old_path, new_path)
print(f"✅ [重命名成功]: {filename} -> {new_name}")
# --- 使用示例 ---
# 请将路径替换为你实际的文件夹路径
target_folder = r"C:\Users\Admin\Pictures\Travel"
batch_rename_sequence(target_folder, prefix="Travel_Japan", start_index=1)需求: 删除文件名中多余的字符(如“ - 副本”),或者将文件名中的空格替换为下划线。
适用场景: 处理从网盘批量下载的文件、整理同事发来的命名不规范的文档。
Python
import os
def batch_replace_keyword(folder_path, target_word, replace_word=""):
files = os.listdir(folder_path)
count = 0
for filename in files:
# 如果文件名中包含目标关键词
if target_word in filename:
# 1. 生成新文件名 (字符串替换)
new_name = filename.replace(target_word, replace_word)
# 2. 拼接路径
old_path = os.path.join(folder_path, filename)
new_path = os.path.join(folder_path, new_name)
# 3. 避免文件名冲突 (如果新名字已经存在,则跳过)
if os.path.exists(new_path):
print(f"⚠️ [跳过] 目标文件已存在: {new_name}")
continue
os.rename(old_path, new_path)
print(f"🔨 [清洗完成]: {filename} -> {new_name}")
count += 1
print(f"🎉 总计处理了 {count} 个文件。")
# --- 使用示例 ---
# 场景:把 " - 副本" 删掉,相当于替换为空字符串
work_dir = r"D:\Work\Reports\2024"
batch_replace_keyword(work_dir, target_word=" - 副本", replace_word="")需求: 批量将所有的 .txt 文件后缀修改为 .md(Markdown格式),或者将 .jpeg 统一为 .jpg。
适用场景: 代码工程迁移、特定软件格式兼容、日志文件处理。
Python
import os
def batch_change_extension(folder_path, old_ext, new_ext):
# 确保扩展名带点,例如 .txt
if not old_ext.startswith('.'): old_ext = '.' + old_ext
if not new_ext.startswith('.'): new_ext = '.' + new_ext
files = os.listdir(folder_path)
for filename in files:
# 检查是否以旧后缀结尾
if filename.endswith(old_ext):
# 1. 分离文件名和后缀
base_name = os.path.splitext(filename)[0]
# 2. 组合新名字
new_name = base_name + new_ext
# 3. 执行重命名
os.rename(
os.path.join(folder_path, filename),
os.path.join(folder_path, new_name)
)
print(f"🔄 [格式转换]: {filename} -> {new_name}")
# --- 使用示例 ---
# 场景:将文件夹内所有 .htm 文件改为 .html
web_dir = r"/var/www/html/project"
batch_change_extension(web_dir, ".htm", ".html")批量重命名一旦出错,恢复起来非常麻烦(除非你有备份)。强烈建议在执行 os.rename 之前,先增加一个 “演习模式”(Dry Run)。
我们可以封装一个更通用的函数,增加一个 dry_run 参数:
Python
import os
def safe_rename(folder_path, dry_run=True):
files = os.listdir(folder_path)
print(f"🔍 当前模式: {'演习模式 (不实际修改)' if dry_run else '实战模式 (谨慎操作)'}")
print("-" * 40)
for i, filename in enumerate(files):
if filename.startswith('.'): continue
# 假设逻辑是:加前缀 "2025_"
new_name = f"2025_{filename}"
if dry_run:
# 演习模式:只打印,不执行
print(f"👁️ [预览] {filename} ---> {new_name}")
else:
# 实战模式:真正动手
old_p = os.path.join(folder_path, filename)
new_p = os.path.join(folder_path, new_name)
os.rename(old_p, new_p)
print(f"✅ [已修改] {filename} ---> {new_name}")
# --- 使用建议 ---
# 第一步:先设为 True,运行看打印结果是否符合预期
safe_rename(r"D:\TestFiles", dry_run=True)
# 第二步:确认无误后,改为 False 再次运行
# safe_rename(r"D:\TestFiles", dry_run=False)原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。