快速修改大量文件的名称:Python代码实现
本文介绍基于Python语言,按照一定命名规则批量修改多个文件的文件名的方法。
1 需求
已知现有一个文件夹,其中包括班级所有同学上交的作业文件,每人一份;所有作业文件命名格式统一,都是地信1701_姓名_学习心得
格式。
![快速修改大量文件的名称:Python代码实现](https://qnam.smzdm.com/202404/08/66138cf76fff63577.png_e1080.jpg)
现需要对每一位同学的作业文件加以改名,有很多种需求。
第一种需求,将每一位同学作业文件名中原本是姓名
的部分,都修改为学号
。即原本的地信1701_姓名_学习心得
修改为地信1701_学号_学习心得
(每一位同学有且仅有一个学号,且相互不重复,且姓名与学号的对应关系我们是已知的),如下图所示。
![快速修改大量文件的名称:Python代码实现](https://qnam.smzdm.com/202404/08/66138cf743d8a3577.png_e1080.jpg)
第二种需求,将每一位同学作业文件名中原本姓名
的部分的后面,都添加上学号
。即原本的地信1701_姓名_学习心得
修改为地信1701_姓名_学号_学习心得
,如下图所示。
![快速修改大量文件的名称:Python代码实现](https://qnam.smzdm.com/202404/08/66138cf78047c3577.png_e1080.jpg)
第三种需求,将每一位同学满足第二种需求后的作业文件名中的下划线_
部分,都修改为连接符-
。即原本的地信1701_姓名_学号_学习心得
修改为地信1701-姓名-学号-学习心得
,如下图所示。
![快速修改大量文件的名称:Python代码实现](https://qnam.smzdm.com/202404/08/66138cf769bcc3577.png_e1080.jpg)
好了,知道了需求我们就可以开始进行代码的编写了。
2 代码实现
首先,导入必要的库。
import os
from openpyxl import load_workbook
接下来,我们首先需要让程序知道每一位同学的姓名与学号之间的对应关系。因为我们已知姓名与学号之间的关系,因此首先需要类似于下图的表格,其中为姓名与学号的一一对应关系。
![快速修改大量文件的名称:Python代码实现](https://qnam.smzdm.com/202404/08/66138cf70c8433577.png_e1080.jpg)
接下来,我们需要将上述表格中的内容在Python中以字典的格式存储。具体代码如下,关于这一部分代码的解释我们在之前的文章中介绍过,这里就不再赘述。
original_path='F:/学习/2020-2021-2/形势与政策(二)/论文与学习心得/01_学习心得/地信1701-学习心得/'
look_up_table_path='F:/学习/2020-2021-2/形势与政策(二)/论文与学习心得/01_学习心得/Name_Number.xlsx'
look_up_table_row_start=2
look_up_table_row_number=32
name_number_dict={}
look_up_table_excel=load_workbook(look_up_table_path)
look_up_table_all_sheet=look_up_table_excel.get_sheet_names()
look_up_table_sheet=look_up_table_excel.get_sheet_by_name(look_up_table_all_sheet[0])
for i in range(look_up_table_row_start,look_up_table_row_start+look_up_table_row_number):
number=look_up_table_sheet.cell(i,1).value
name=look_up_table_sheet.cell(i,2).value
name_number_dict[number]=name
接下来,进行第一种需求的代码实现。
# Replacement Renaming
all_word=os.listdir(original_path)
for i in range(len(all_word)):
old_name=all_word[i]
old_name_name_end=old_name.rfind('_')
old_name_name=old_name[7:old_name_name_end]
new_name_number=[k for k, v in name_number_dict.items() if v==old_name_name]
new_name=old_name.replace(old_name_name,''.join(str(w) for w in new_name_number))
os.rename(original_path+old_name,original_path+new_name)
其中,由于大家的姓名有两个字、三个字或者更多字,因此我们使用了old_name_name_end
获取原有文件名称中姓名最后一个字所在的下标;而姓名开始的位置是确定的,即从而确定了每一位同学姓名在原有文件名中的起始与终止下标位置。同时利用replace
,依据同学的姓名,在字典中搜索该同学的学号,最后将同学的名字替换为其对应的学号。
其次,是第二种需求。
# Additional Renaming
all_word=os.listdir(original_path)
for i in range(len(all_word)):
old_name=all_word[i]
old_name_name_end=old_name.rfind('_')
old_name_name=old_name[7:old_name_name_end]
new_name_number=[k for k, v in name_number_dict.items() if v==old_name_name]
old_name_list=list(old_name)
insert_number=''.join(str(w) for w in new_name_number)+'_'
old_name_list.insert(old_name_name_end+1,insert_number)
new_name=''.join(old_name_list)
os.rename(original_path+old_name,original_path+new_name)
在这里,同样使用old_name_name_end
获取原有文件名称中姓名最后一个字所在的下标,从而确定了每一位同学姓名在原有文件名中的起始与终止下标位置。此外,利用insert
,将学号这一项插入到原有的文件名称中。
最后,是第三种需求。
# Modified Renaming
all_word=os.listdir(original_path)
for i in range(len(all_word)):
old_name=all_word[i]
new_name=old_name.replace('_',"-",3)
os.rename(original_path+old_name,original_path+new_name)
这个就简单很多了,直接利用replace
,用连接符-
替换掉原有的下划线_
即可。
至此,大功告成。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
![](https://res.smzdm.com/pc/pc_shequ/dist/img/the-end.png)
卖女孩的火柴棍
二,后面有其他大佬建议,原因在于之前囫囵吞枣,应该得回归基础,找几本书看看。。。
三,目前执行中,但书本看过的内容很快就忘,没啥感觉,对python及其第三库规则or参数还是不甚了解。。。
四,本人非系统开发方向,非it程序员,但需要python做数理统计、数据挖掘、策略规则和算法建模,so应该咋办?求指导
校验提示文案
小小搬砖手
校验提示文案
Jack_Zeng
校验提示文案
龙龙七
校验提示文案
蛋蛋爹
校验提示文案
徐汇本拉风
校验提示文案
卖女孩的火柴棍
一、数据导入
二、数据预处理(清洗规整、增删改查、数据类型转化)
三、探索分析(可视自动化)
四、特征衍生(组合变量批量自动化生成、特征筛选指标评估自动化)
五、分箱筛选(变量分箱最优自动化)
六、相关性构建(多类算法聚合:逻辑、回归、分类&机器学习、深度学习、强化学习
七、检验评测(第六项计算各自的混淆矩阵指标,自动化计算结果)
八、分数转换
九、超参调优
so针对第二至七项,就python及其第三方库(自动化)实操详解的电子书及其代码而言,特跪求大佬推荐。。。非AI或者chatgpt+XX系列,书籍需求具体如下:
1、小白速成上手、简单易懂
because:文科转型
2、行业内公认靠谱,电子书中文版(暂不考虑:单个某库的说明书)
because:内容忒多繁杂,且无常用算法库的聚合呈现
3、需要2023年出版
because:即使按书实操,旧版书均因为其所涉之第三方库的灭失、相同操作而新旧版本不适配、新旧版本变更操作等原因而导致无法实现同等功能)
校验提示文案
捉虫挑刺小能手
校验提示文案
捉虫挑刺小能手
校验提示文案
蛋蛋爹
校验提示文案
龙龙七
校验提示文案
卖女孩的火柴棍
二,后面有其他大佬建议,原因在于之前囫囵吞枣,应该得回归基础,找几本书看看。。。
三,目前执行中,但书本看过的内容很快就忘,没啥感觉,对python及其第三库规则or参数还是不甚了解。。。
四,本人非系统开发方向,非it程序员,但需要python做数理统计、数据挖掘、策略规则和算法建模,so应该咋办?求指导
校验提示文案
卖女孩的火柴棍
一、数据导入
二、数据预处理(清洗规整、增删改查、数据类型转化)
三、探索分析(可视自动化)
四、特征衍生(组合变量批量自动化生成、特征筛选指标评估自动化)
五、分箱筛选(变量分箱最优自动化)
六、相关性构建(多类算法聚合:逻辑、回归、分类&机器学习、深度学习、强化学习
七、检验评测(第六项计算各自的混淆矩阵指标,自动化计算结果)
八、分数转换
九、超参调优
so针对第二至七项,就python及其第三方库(自动化)实操详解的电子书及其代码而言,特跪求大佬推荐。。。非AI或者chatgpt+XX系列,书籍需求具体如下:
1、小白速成上手、简单易懂
because:文科转型
2、行业内公认靠谱,电子书中文版(暂不考虑:单个某库的说明书)
because:内容忒多繁杂,且无常用算法库的聚合呈现
3、需要2023年出版
because:即使按书实操,旧版书均因为其所涉之第三方库的灭失、相同操作而新旧版本不适配、新旧版本变更操作等原因而导致无法实现同等功能)
校验提示文案
小小搬砖手
校验提示文案
徐汇本拉风
校验提示文案
Jack_Zeng
校验提示文案