tags: Python Pandas Excel Tips

写在前面

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

文件夹内容

可以看到里面的文件名主要的格式为:<姓名><等级或成绩><成绩><其他信息>.docx, (忽略其他冗余文件).

Excel内容

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

序号 学号 姓名 其他信息
1 20XXXXXXXX 张三 xxx
2 20XXXXXXXX 王小明 xxx
3 20XXXXXXXX 李四 xxx

要得到的结果

这里的结果就是一个准确的格式:<学号>+<姓名>.docx.

思路与分析

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

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

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

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

import os
from glob import glob
import pandas as pddef 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..")

小结

虽然能很好地完成任务, 但是这个程序还有一些小问题, 下面列举一下:

  1. 对于Windows下的程序, 需要将程序中出现的所有/改为\\, 否则会出现路径无法识别的问题.(不能使用原生字符串r'\', 因为当反斜杠作为字符串结尾的时候Python解释器会认为没有与前面的引号匹配的引号, 只能用两个反斜杠代替.
  2. 如果出现名字的前两个字相同的情况, 则无法解决, 这里提供一个思路:
    import re
    re.findall('([\u4e00-\u9fa5]*)', u"张三A90已打印")[0]
    

    通过Unicode编码中文的方法识别中文, 如果遇到没有<成绩>字样的情况, 直接去掉已打印这几个字符, 就可以完美实现了.

使用pandas批量重命名(指定Excel中的对应列)相关推荐

  1. python批量重命名指定目录下所有文件的后缀名

    python批量重命名指定目录下所有文件的后缀名 有个需求,需要把某个文件夹下所有后缀名为.abc的更改为.xyz; #批量重命名指定目录下面所有文件的后缀名. word_dir为需要更改后缀的文件夹 ...

  2. Python批量重命名Maya场景中的3D物体

    最初接触Maya是从7.0开始的,那时候Maya只支持mel(Maya Expression Language),mel的局限性很大,只能在Maya内部使用,功能来说没有Python强大: 后来从Ma ...

  3. 批量重命名工作簿中的工作表名

    一.批量重命名一个工作簿中的所有工作表 工作簿中有10个工作表,每张工作表的名字中都带有"2020年"字样,想把这几个字去掉.虽然说一个一个的重命名也花不了多少时间,但是如果这个工 ...

  4. 文件批量重命名(Excel+REN)

    最近在整理文件的时候需要将一些文件进行重命名,最直接的方式当然就是"右击-重命名-输入名字",但是我怎么能做重复度这么高的内容呢?所以探究了一种"难"的方法. ...

  5. python图片预处理基本操作之——批量重命名,修改格式,统一大小,保存为其他路径,灰度化,归一化并将BGR写入txt

    最近学习需要,接触了一些图片预处理的工作(用python实现),但网上集中的篇幅不多,故整理如下,主要包括: 批量重命名大量图片 修改格式(此处以.bmp转化为.jpg为例) 统一图片大小(分辨率12 ...

  6. 基于Python的文件批量重命名(附详细过程解读)

    基于Python的文件批量重命名(附详细过程解读) 0.闲言碎语 hi ~ 欢迎关注公众号"壹贰叁言"! 啥都写,图一乐哈哈! 1.前因后果 前几日,我在用arcgis处理一些数据 ...

  7. Python批量重命名图片

    Python批量重命名图片 # -*- coding:utf8 -*-import osclass BatchRename():'''批量重命名文件夹中的图片文件'''def __init__(sel ...

  8. for循环批量写文件 shell_shell脚本:for循环批量重命名带空格文件名的文件

    今天在学习shell脚本攻略第二章2.13 批量重命名和移动时,由于我的文件命令有的文件名字中出现空格,出现了许多问题,因此将解决问题的过程记录了下来,希望能够和大家交流学习,共同进步,谢谢! 问题代 ...

  9. 数据集图片批量重命名

    原始格式: 需要将其顺序与前一文件夹连接起来 因此,改为从3690开始,如下: 代码: # -*- coding:utf8 -*-import osclass BatchRename():'''批量重 ...

最新文章

  1. electron调用python_在Electron app中运行python脚本
  2. 【Python】多种方式实现生成验证码
  3. Thinkphp 逻辑与,逻辑或的复合查询
  4. How to publish in an open world?
  5. C# dataTable 转 IList 问题
  6. 一篇不一样的docker原理解析 提高篇
  7. webclinet downstring 搜狐 为什么是个?号
  8. 动态生成类_springboot动态生成类属性
  9. 如何在“家庭”应用中创建场景?
  10. 浅谈Java、Python、C++、PHP、JavaScript5大编程语言该如何选择
  11. c++ 怎么输出保留2位小数的浮点数
  12. zabbix通过UNIXODBC连接数据库
  13. java boxlayout 换行,继承FlexboxLayout自定义可自动换行的tag标签
  14. Java二叉树基础操作常见代码例题
  15. 一般现在时,主语为第三人称单数,例句说明
  16. 微观经济学案例分析(八)
  17. iOS集成 Paypal 贝宝支付
  18. 艾默生首席执行官范大为退休;液化空气将新建生产装置为京东方供应气体 | 美通企业日报...
  19. mysql错误码2002_MySQL错误ERROR 2002 (HY000): Can't connect to local MySQL server through socket
  20. 感谢、感恩与CSDN结缘的第1498天

热门文章

  1. 开放开源开先河(上)
  2. 每日博士S8补充8大明星菌株,助力提升免疫力
  3. 双目视觉(三)立体匹配算法
  4. AI工程师应聘要具备哪些能力?
  5. 潘多拉-视频播放器,一个轻量的视频播放器
  6. 【元器件学习笔记—电阻】(7)——电阻串并联电路
  7. studio 不能输入中文
  8. html5 audio左侧,HTML5之Audio(四)—— 左右声道
  9. 烟雨峨眉金顶观日出第一次近距离与这座群山环保的小城接触
  10. python文本可读性