一、功能讲解
这段代码是一个用于批量重命名文件的Python脚本。它的主要功能是在文件名前添加一定数量的前导零,使得所有文件名的长度保持一致。这对于管理大量文件,特别是当文件名需要按照特定顺序排列时非常有用。
-
导入必要的模块:
os
: 用于操作系统相关的功能,如读取目录等。shutil
: 提供高级操作,这里用于移动(重命名)文件。
-
rename_images
函数:- 参数:
directory
: 图片文件所在的目录。prefix
(默认为 "img"): 文件名的前缀。total_length
(默认为 5): 0的个数。
- 参数:
-
功能:
-
获取目录中的所有文件:
- 使用
os.listdir()
获取指定目录下的所有文件名。
- 使用
-
遍历文件:
- 对于每个文件,检查其是否为文件类型。
- 获取文件的扩展名。
- 如果文件是图片(这里指定了几种常见的图片扩展名),则执行重命名步骤。
-
构建新的文件名:
- 使用
str().zfill()
方法来添加前导零,确保编号部分达到指定的长度。 - 新文件名格式为
prefix_{编号}{扩展名}
。 - 编号的位数取决于
total_length
参数,减去前缀长度和扩展名长度。
- 使用
-
重命名文件:
- 使用
shutil.move()
移动文件到同一目录下,实际上是重命名操作。 - 打印出旧文件名和新文件名。
- 使用
-
-
主程序 (
if __name__ == "__main__":
):- 设置要重命名的图片所在的目录。
- 设置文件名的总长度。
- 调用
rename_images
函数。
二、代码
import os
import shutil
def rename_images(directory, prefix="img", total_length=5):
# 确保目录存在
if not os.path.exists(directory):
print(f"Directory '{directory}' does not exist.")
return
# 获取目录中的所有文件
files = os.listdir(directory)
# 记录已重命名的文件数量
counter = 1
for filename in files:
# 检查是否为文件
if os.path.isfile(os.path.join(directory, filename)):
# 获取文件扩展名
_, ext = os.path.splitext(filename)
# print(_)
print(ext)
# 检查是否为图片文件(可以根据需要添加更多扩展名)
if ext.lower() in ('.png', '.jpg', '.jpeg', '.gif', '.bmp'):
# 构建新的文件名
# 使用format方法来添加前导零
new_filename = f"{prefix}_{str(counter).zfill(total_length+1)}{ext}"
# 获取原始文件的完整路径
old_filepath = os.path.join(directory, filename)
# 获取新文件的完整路径
new_filepath = os.path.join(directory, new_filename)
# 重命名文件
shutil.move(old_filepath, new_filepath)
print(f"Renamed '{filename}' to '{new_filename}'")
counter += 1
print(f"一共成功命名了{counter-1}个文件。")
if __name__ == "__main__":
# 指定图片所在的目录
directory = "imgs"
# 前导零长度
total_length = 4
# 定义自己的前缀
prefix = '定义前缀'
# 调用函数
rename_images(directory, total_length=total_length, prefix=prefix)
执行结果: