在实际工作场景中,经常会遇到文件以身份证号命名的情况,比如人事档案、学生资料等,为了方便识别和管理,往往需要将这些文件改成对应的姓名命名。手动逐个修改不仅效率低下,还容易出现重命名错误,使用Python可以轻松实现批量自动化处理。

实现思路梳理
整个功能的核心逻辑可以分为三个步骤:
- 准备身份证号和姓名的对应关系,通常可以用字典或者CSV文件存储
- 遍历目标文件夹下的所有文件,筛选出需要重命名的文件
- 根据对应关系匹配新文件名,调用重命名函数完成修改
核心模块与函数说明
实现该功能主要用到Python的os模块,其中两个核心函数的作用如下:
os.listdir(path):列出指定路径下的所有文件和文件夹名称os.rename(old_path, new_path):将旧路径的文件重命名为新路径
完整实现代码
以下代码实现了从CSV文件读取身份证号和姓名对应关系,批量重命名目标文件夹下以身份证号命名的文件:
import os
import csv
def rename_files_by_id(folder_path, csv_path):
# 读取身份证号和姓名的对应关系,存储到字典中
id_name_map = {}
with open(csv_path, 'r', encoding='utf-8') as f:
reader = csv.reader(f)
# 假设CSV第一列是身份证号,第二列是姓名,跳过表头
next(reader)
for row in reader:
if len(row) >= 2:
id_num = row[0].strip()
name = row[1].strip()
id_name_map[id_num] = name
# 遍历目标文件夹下的所有文件
for filename in os.listdir(folder_path):
# 获取文件的完整路径
old_file_path = os.path.join(folder_path, filename)
# 跳过文件夹,只处理文件
if not os.path.isfile(old_file_path):
continue
# 获取文件名(不含扩展名)和扩展名
file_name_without_ext, file_ext = os.path.splitext(filename)
# 判断文件名是否为身份证号,且存在于对应关系中
if file_name_without_ext in id_name_map:
new_name = id_name_map[file_name_without_ext] + file_ext
new_file_path = os.path.join(folder_path, new_name)
# 执行重命名操作
os.rename(old_file_path, new_file_path)
print(f"重命名成功:{filename} -> {new_name}")
else:
print(f"未找到对应关系,跳过文件:{filename}")
if __name__ == "__main__":
# 配置目标文件夹路径和CSV对应关系文件路径
target_folder = "./target_files"
csv_file = "./id_name_mapping.csv"
rename_files_by_id(target_folder, csv_file)注意事项
运行代码前需要注意以下几点:
- 确保CSV文件的编码格式和代码中读取的编码一致,避免中文乱码
- 提前备份目标文件夹内的文件,防止重命名出错导致文件丢失
- 如果存在同名文件,重命名时会抛出异常,可以在代码中添加同名判断逻辑
- 身份证号作为文件名时如果包含特殊字符,需要先做清洗处理再匹配
扩展说明
如果对应关系不是存储在CSV文件中,而是直接写在代码里,也可以修改读取逻辑,比如使用字典直接定义对应关系:
# 直接定义身份证号和姓名的对应关系
id_name_dict = {
"110101199001011234": "张三",
"110101199002022345": "李四",
"110101199003033456": "王五"
}只需要把代码中读取CSV的部分替换成上述字典,就可以直接使用内置的对应关系完成重命名操作。