图片重命名
功能需求
python代码,功能是将一个文件夹中的所有照片重命名为身份证号命名,身份证的最后一个字母如果为小写的x,请重新改为大写的X。源文件夹中的照片的命名方式是姓名身份证号。照片的路径为:C:\Users\XuZhenZhong\Desktop\23计3学测照片\新建文件夹下,请将输出结果保存到同级目录下,并将文件夹名修改为23计3修改后。
下面展示一些 内联代码片
。
import os
import shutil
import redef rename_photos_by_id(source_folder, dest_folder):"""从“姓名身份证号.扩展名”格式的文件名中提取身份证号并重命名照片处理身份证号末尾小写x为大写X,保存到目标文件夹参数:source_folder: 源照片文件夹路径dest_folder: 处理后照片保存路径"""# 支持的常见图片格式image_extensions = ('.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff', '.webp')# 创建目标文件夹(不存在则创建)if not os.path.exists(dest_folder):os.makedirs(dest_folder)print(f"已创建目标文件夹: {dest_folder}")# 遍历源文件夹所有文件for filename in os.listdir(source_folder):source_path = os.path.join(source_folder, filename)# 跳过子文件夹,只处理文件if not os.path.isfile(source_path):print(f"跳过非文件: {filename}")continue# 跳过非图片文件if not filename.lower().endswith(image_extensions):print(f"跳过非图片文件: {filename}")continue# 提取文件名(不含扩展名)file_name_without_ext = os.path.splitext(filename)[0]file_ext = os.path.splitext(filename)[1]# 正则匹配18位身份证号(最后一位可能为数字或x/X)id_pattern = r'(\d{17}[\dXx])'id_match = re.search(id_pattern, file_name_without_ext)if not id_match:print(f"未从文件名中识别到身份证号,跳过: {filename}")continue# 提取并处理身份证号(小写x转大写X)id_number = id_match.group(1)if id_number[-1].lower() == 'x':id_number = id_number[:-1] + 'X'# 构建新文件名(身份证号.扩展名)new_filename = f"{id_number}{file_ext}"dest_path = os.path.join(dest_folder, new_filename)# 处理重名:若文件名已存在,添加序号(如123456789012345678X_1.jpg)counter = 1while os.path.exists(dest_path):new_filename = f"{id_number}_{counter}{file_ext}"dest_path = os.path.join(dest_folder, new_filename)counter += 1# 复制文件到目标文件夹(保留原文件,更安全)shutil.copy2(source_path, dest_path)print(f"已处理: {filename} -> {new_filename}")if __name__ == "__main__":# 源文件夹路径(您提供的路径)source_folder = r"C:\Users\XuZhenZhong\Desktop\23激光2班\23激光2班学测照片"# 目标文件夹路径(同级目录下的“23激光2班学测照片改”)parent_folder = os.path.dirname(source_folder)dest_folder = os.path.join(parent_folder, "23激光2班学测照片改")# 检查源文件夹是否存在if not os.path.exists(source_folder):print(f"错误:源文件夹 '{source_folder}' 不存在,请检查路径是否正确")else:rename_photos_by_id(source_folder, dest_folder)print("\n所有照片处理完成!结果已保存至: " + dest_folder)