使用pandas批量重命名(指定excel中的对应列) 您所在的位置:网站首页 python更改文件名 使用pandas批量重命名(指定excel中的对应列)

使用pandas批量重命名(指定excel中的对应列)

2023-05-16 03:06| 来源: 网络整理| 查看: 265

写在前面

今天有个朋友问我有没有一种简单的方法将Excel中的学号和姓名列作为文件名, 批量重命名100个Word文档, 下面是具体的文件, 文件夹中是待修改的Word文档(存在一些比较冗杂的xlsx文件), Excel前两列是学号和姓名信息.

文件夹内容

可以看到里面的文件名主要的格式为:.docx, (忽略其他冗余文件).

Excel内容

这里不方便给出截图, 以表格形式简单描述:

序号 学号 姓名 其他信息 1 20XXXXXXXX 张三 xxx 2 20XXXXXXXX 王小明 xxx 3 20XXXXXXXX 李四 xxx 要得到的结果

WeChat1cef85e16999ad3e1245771ee0211d73

这里的结果就是一个准确的格式:+.docx.

思路与分析

不难发现, 主要思路其实就是建立两个文件的映射关系, 先提取Excel全部的姓名列和学号列组成dict, 然后遍历文件夹内容找满足名字相等的条目进行修改.

这里面比较麻烦的一点是Word文件名中格式不统一. 一开始我想的是通过正则表达式提取()\w*这种类型的内容, 然后丢到Excel里面找匹配, 但是我对中文正则这块还不熟悉, 于是就只能想别的办法. 后来我发现只取名字的前两个就可以完成匹配, (不过这个的前提是没有前两个字相同的名字的情况)

用到的技术栈(Python)与代码

主要用到三个Python库, 分别是os(用于重命名文件), glob(用于遍历文件夹下的文件, 以Linux通配符的形式, 相较于os.walk()比较方便), 还有就是读取Excel的Pandas.

import os from glob import glob import pandas as pd def modify_name(): df = pd.read_excel("achievement.xlsx", header=0, index_col=0, skiprows=3).iloc[:163, :] id1 = df["学号"] id1 = pd.Series(id1, dtype="string").apply(lambda x: x[:-2]).tolist() name = df["姓名"].tolist() # 截取Word文件名前两个字符作为字典的键, 学号加姓名(文件名的目标格式)作为字典的值 res = {k[:2]: k + "+" + v for k, v in zip(name, id1)} return res # 存放Word文件的目录和文件名 path = "exam_achievement/" files = glob("exam_achievement/*.docx") full_files_name = [i.split('/')[-1] for i in files] # 去掉后缀名便于正则处理(后来发现不用正则的话就没啥用) pure_files_name = [i.split('.')[0] for i in full_files_name] name_n_file = {k[:2]: v for k, v in zip(pure_files_name, files)} modf_name = modify_name() for item in name_n_file: # 满足条件, 改名 if item in modf_name: os.rename(name_n_file[item], path + modf_name[item] + ".docx") print((name_n_file[item], path + modf_name[item] + ".docx"), "ok..")


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有