Python编程实验-对文件进行批量重命名

描述

今天我接到一个任务,老师让我收集全团63人的证件照,并给了我一个Excel文件,含大家的身份证号,让我把收上来的照片按照表格一个个地命名为学生的身份证号。刚拿到这个问题我首先想法当然是分发给组长,让组长收集照片改好后打包发给我。但是后来想了想身份证号属于隐私信息,出于保密的考虑,还是不要让组长接触到身份证号;那么让每个人私发给我照片吗?显然也是不现实的,微信响个不停也挺闹心,而且有的人微信发给我也没有重命名,我还得去表格中查询、复制粘贴,容易出错还很累人的好吗!思来想去,这种一遍一遍查询-更改的操作还是交给计算机来完成吧!
本实验就是基于Python语言,利用文件读写(查询姓名和身份证号)+目录/文件操作(读文件名、重命名)+基本控制流的知识来完成任务。

准备工作

图片来源于网络,ID纯属虚构……

  1. 原始图片:为了模拟同学们发来照片文件名的任意性,原始图片的文件名五花八门但都有姓名,即一定能在Excel文件中找到。存放在img文件夹下。
    在这里插入图片描述
  2. 信息表:从Excel文件中选中列,粘贴到记事本里就自动用空格隔开了。存放在与Python程序同一路径下
    在这里插入图片描述

实现

在这里插入图片描述

import os
import shutil#防止重命名出错,先将原照片复制一份

ls = []#存储每个人的信息,信息是两个元素的列表[Name,Id]

name_id_file = "./name_id.txt"
images_path = "./img"  # 图片文件夹路径
cp_img_dir = "./cp_img"
new_img_dir = "./new_img"
with open(name_id_file, 'r') as f:
    while True:
        try:#多组读入到文件尾
            Name, Id = f.readline().split()
            ls.append([Name, Id])
        except:
            break

img_ls = os.listdir(images_path)  # 图片文件名构成的列表

os.makedirs(cp_img_dir)#先创建存储照片备份的文件夹
for img in img_ls:
    try:
        shutil.copy(images_path + "/" + img, cp_img_dir)
    except:
        pass

cnt=1
for info in ls:#从信息表中逐一取出信息,到照片表里进行匹配
    flag = 0#查找位
    for img in img_ls:
        if info[0] in img:#信息表里的姓名一定是冗余度最低的
            src = images_path + "/" + img
            dst = new_img_dir + "/" + info[1] + "." + img.split(".")[1]
            os.rename(src, dst)
            if cnt%3!=0:#每行打印三个成员的信息
                print("{}\t照片重命名成功".format(info[0]),end="\t")
            else:
                print("{}\t照片重命名成功".format(info[0]))
            flag = 1
            break
    if flag == 0:
        if cnt%3!=0:
            print("{}\t照片不存在".format(info[0]),end="\t")
        else:
            print("{}\t照片不存在".format(info[0]))
    cnt+=1

验证

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结语

感觉学了计算机专业一个很大的收获就是有时候做事,能想想如何解放双手,让计算机完成一遍一遍重复的事情,提高效率。这也算是将理论学习走向实践应用的过程吧,用项目来驱动学习或许更会有学习的乐趣吧。上面的程序或许还有所欠缺,欢迎大家批评指正。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值