文件处理,批量重命名文件,修改指定目录下所有文件的扩展名或前缀
[Python] 纯文本查看 复制代码import os
def batch_rename(folder_path, prefix="document", keep_extension=True, sort_key=None):
"""
批量重命名指定文件夹中的文件
参数:
folder_path (str): 目标文件夹路径
prefix (str): 新文件名前缀(默认:"document")
keep_extension (bool): 是否保留原始扩展名(默认:True)
sort_key (callable): 排序函数(默认:按文件名排序)
"""
try:
# 获取文件列表并过滤掉目录
files = [f for f in os.listdir(folder_path)
if os.path.isfile(os.path.join(folder_path, f))]
# 排序处理
if sort_key:
files.sort(key=sort_key)
else:
files.sort() # 默认按文件名排序
success_count = 0
skipped_count = 0
for idx, filename in enumerate(files, start=1):
old_path = os.path.join(folder_path, filename)
# 跳过系统文件(如Thumbs.db)
if filename.startswith('~$'):
skipped_count += 1
continue
# 构造新文件名
base, ext = os.path.splitext(filename)
new_name = f"{prefix}_{idx:03d}"
if keep_extension:
new_name += ext
new_path = os.path.join(folder_path, new_name)
try:
# 防止文件名重复
counter = 1
while os.path.exists(new_path):
new_name = f"{prefix}_{idx:03d}_{counter}{ext}"
new_path = os.path.join(folder_path, new_name)
counter += 1
os.rename(old_path, new_path)
print(f"重命名成功: {filename} -> {new_name}")
success_count += 1
except Exception as e:
print(f"错误: 无法重命名 {filename} - {str(e)}")
print(f"\n操作完成!成功重命名 {success_count} 个文件,跳过 {skipped_count} 个文件")
except Exception as e:
print(f"发生错误: {str(e)}")
# 使用示例
if __name__ == "__main__":
target_folder = "F:\\工作文件\\临时\\demo001"
# 自定义排序示例(按修改时间排序):
# from datetime import datetime
# batch_rename(target_folder, sort_key=lambda x: os.path.getmtime(os.path.join(target_folder, x)))
batch_rename(
folder_path=target_folder,
prefix="report",
keep_extension=False, # 设置为False时所有文件将变为.txt
sort_key=None # 自定义排序函数可在此处传入
)