一、问题背景在日常办公过程中,批量重命名是经常使用的操作。之前我们已经进行了初步探索,主要是通过批处理文件、renamer软件或者Python中的pathlib等模块对当前目录下的文件进行批量重命名。 而今天我们要使用的是Python+Excel的方法对指定目录下的文件进行个性化的重命名。采用这种方法有以下两种优势: 1. 个性化重命名原文件名和目标文件名没有规律,无法通过正则表达式进行重命名,可以用Excel对文件名进行手动编辑,对指定文件进行个性化的重命名。 2. 支持逆向重命名以往批量重命名前,需要对原文件名进行备份,否则重命名后还需要手动改回来,十分麻烦。而这种方法只需要交换A列和B列的数据,就可以进行逆向重命名,不必担心改完后不能恢复原文件名。 二、批量重命名实现过程1.问题的提出当前目录下有AAA.txt,BBB.txt, CCC.txt等多个文件,我们需要把它们批量重命名为111.txt, 222.txt, 333.txt这样的形式,一般的批量重命名的方法很难实现。 2. 问题分析我们把需要重命名的文件选中,在【主页】标签下点击【复制路径】获取这些文件名的路径。 然后我们就可以得到下面这种样式: 'G:\桌面\用Python给文件进行批量重命名\AAA.txt' 把上面的内容复制到Excel中,按'\'和引号进行【分列】操作,最后得到【111.txt, 222.txt, 333.txt】这样的文件名,然后放到A列中,如下图所示: Excel表中,A列为旧的文件名, B列为新的文件名,我们可以手动对新文件名进行修改,然后通过Python读取Excel每一行,把A列文件名重命名为B列对应的文件名。 3. 问题的解决下一步,我们就可以采用Python编写对应代码:读取Excel文件中的A列和B列内容,然后遍历当前目录下的指定文件,采用os.rename()对文件进行重命名。 第一种方法:使用xlwings——过程有点儿复杂 原理就是读取file_name.xlsx文件中的内容,然后遍历每一行后,用os.rename()进行重命名。
第二种方法:采用openpyxl——简化代码 相比xlwings,openpyxl的代码更为简单,逻辑也很清晰。导入模块,打开工作簿,获取表格的内容,循环每一行,读取非空数据,然后用os.rename()进行重命名。 import os 第三种方法:Pandas法——进一步简化 pandas这个模块导入虽然有点儿慢,但是它的重命名代码量最少,搭配上pathlib,命名效率更高。实现过程是导入pandas和path模块,读取Excel文件,把A列和B列转化为一一对应的字典,然后遍历Excel表的每一行进行批量重命名。
以上代码中,首先将 Excel 文件读取到 df 这个数据框变量中,然后使用 set_index() 方法将第一列设置为索引,并使用 squeeze() 方法将结果转换为 Series。然后,使用 to_dict() 方法将 Series 转换为字典。最后,遍历字典,执行文件重命名操作。 三、学后反思Python在批量重命名的过程中体现出良好的跨平台性,可以把Excel表和文件连接起来,使数据的流转更加便捷。另一方面,Python在批量操作文件方面的优势明显,程序调试成功后,哪怕是上千个文件也可以轻松重命名,可以极大地提升重命名准确性和效率。 虽然我们可以通过交换A列和B列的数据进行逆向重命名,但是保险起见,还是在重命名之前对文件进行备份,然后再操作,以免出现操作失误的问题。 Python程序默认是从Excel表第二行开始读取,所以一定要保留列索引,不要删除,否则可能会出现报错。 本次小项目涉及xlwings, openpyxl和pandas等Excel读取模块,以及os和pathlib等多个文件管理模块,对于掌握它们之间的差异具有很好的帮助作用。可以明显看出,openpyxl和pandas比xlwings使用起来更简单,所以推荐初学者直接学openpyxl,高级的学习者可以学习pandas,为后期学习数据分析打下基础。 |
|
来自: hercules028 > 《Python and AI》