Python自动批量修改文件名称的方法

python,自动,批量,修改,文件名称,方法 · 浏览次数 : 752

小编点评

```python import os from openpyxl import load_workbook # Original path to the workbook containing student names and IDs original_path='F:/学习/2020-2021-2/形势与政策(二)/论文与学习心得/01_学习心得/地信1701-学习心得/' # Path to the Excel file containing name and ID mappings look_up_table_path='F:/学习/2020-2021-2/形势与政策(二)/论文与学习心得/01_学习心得/Name_Number.xlsx' # Load the Excel file containing name and ID mappings look_up_table_row_start=2 # Start row number for name and ID mappings look_up_table_row_number=32 # Number of rows in the name and ID mappings sheet # Create a dictionary to store name-to-number mappings name_number_dict={} # Load the workbook with name and ID mappings 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]) # Loop through the rows in the name and ID mappings sheet for i in range(look_up_table_row_start,look_up_table_row_start+look_up_table_row_number): # Get the number and name from the sheet number=look_up_table_sheet.cell(i,1).value name=look_up_table_sheet.cell(i,2).value name_number_dict[number]=name # Perform the following renaming operations for each student for i in range(len(all_word)): # Get the original and new names from the list old_name=all_word[i] 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)) # Perform the desired renaming operation os.rename(original_path+old_name,original_path+new_name) # Print a message to indicate that the renaming process is complete print('Renaming complete!') ```

正文

  本文介绍基于Python语言,按照一定命名规则批量修改多个文件的文件名的方法。

  已知现有一个文件夹,其中包括班级所有同学上交的作业文件,每人一份;所有作业文件命名格式统一,都是地信1701_姓名_学习心得格式。

  现需要对每一位同学的作业文件加以改名,有很多种需求。

  第一种需求,将每一位同学作业文件名中原本是姓名的部分,都修改为学号。即原本的地信1701_姓名_学习心得修改为地信1701_学号_学习心得(每一位同学有且仅有一个学号,且相互不重复,且姓名与学号的对应关系我们是已知的),如下图所示。

  第二种需求,将每一位同学作业文件名中原本姓名的部分的后面,都添加上学号。即原本的地信1701_姓名_学习心得修改为地信1701_姓名_学号_学习心得,如下图所示。

  第三种需求,将每一位同学满足第二种需求后的作业文件名中的下划线_部分,都修改为连接符-。即原本的地信1701_姓名_学号_学习心得修改为地信1701-姓名-学号-学习心得,如下图所示。

  好了,知道了需求我们就可以开始进行代码的编写了。

  首先,导入必要的库。

import os
from openpyxl import load_workbook

  接下来,我们首先需要让程序知道每一位同学的姓名与学号之间的对应关系。因为我们已知姓名与学号之间的关系,因此首先需要类似于下图的表格,其中为姓名与学号的一一对应关系。

  接下来,我们需要将上述表格中的内容在Python中以字典的格式存储。具体代码如下,关于这一部分代码的解释大家查看Python导入Excel表格数据并以字典dict格式保存即可,此处就不再赘述。

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,用连接符-替换掉原有的下划线_即可。

  至此,大功告成。

与Python自动批量修改文件名称的方法相似的内容:

Python自动批量修改文件名称的方法

本文介绍基于Python语言,按照一定命名规则批量修改多个文件的文件名的方法~

Python核对遥感影像批量下载情况的方法

本文介绍批量下载遥感影像时,利用Python实现已下载影像文件的核对,并自动生成未下载影像的下载链接列表的方法~

Python自动合并Word文件同时添加分页符的方法

本文介绍基于Python,实现对多个Word文档加以自动合并,并在每次合并时按要求增添一个分页符的方法~

在 Excel 中使用 Python 自动填充公式

安转Python包的国内镜像源 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple 阿里云 https://mirrors.aliyun.com/pypi/simple/ 豆瓣 https://pypi.douban.com/simple/ 百度云 https

[转帖]利用Python调用outlook自动发送邮件

↓↓↓欢迎关注我的公众号,在这里有数据相关技术经验的优质原创文章↓↓↓ 使用Python发送邮件有两种方式,一种是使用smtp调用邮箱的smtp服务器,另一种是直接调用程序直接发送邮件。而在outlook中我们一般是没有权限去开启smtp服务的,所以一般只能通过第二种直接调用方式发送邮件 基础版本–

[转帖]利用Python调用outlook自动发送邮件

↓↓↓欢迎关注我的公众号,在这里有数据相关技术经验的优质原创文章↓↓↓ 使用Python发送邮件有两种方式,一种是使用smtp调用邮箱的smtp服务器,另一种是直接调用程序直接发送邮件。而在outlook中我们一般是没有权限去开启smtp服务的,所以一般只能通过第二种直接调用方式发送邮件 基础版本–

数值计算:前向和反向自动微分(Python实现)

自动微分技术(称为“automatic differentiation, autodiff”)是介于符号微分和数值微分的一种技术,它是在计算效率和计算精度之间的一种折衷。自动微分不受任何离散化算法误差的约束,它充分利用了微分的链式法则和其他关于导数的性质来准确地计算它们。我们可以选择定义一种新的数据类型来存储[u,u′]和[v,v′]这类数对。我们可以在这些数对上定义一种代数运算,这些代数运算编码了一些经典的操作。

用 Python 脚本实现电脑唤醒后自动拍照 截屏并发邮件通知

背景 背景是这样的, 我的家里台式机常年 休眠, 并配置了 Wake On Lan (WOL) 方便远程唤醒并使用. 但是我发现, 偶尔台式机会被其他情况唤醒, 这时候我并不知道, 结果白白运行了好几天, 浪费了很多电. 所以我的需求是这样的: 🤔 电脑唤醒后(可能是开机, 有可能是从休眠状态唤醒

Python网络爬虫原理及实践

网络爬虫:是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。网络爬虫相关技术和框架繁多,针对场景的不同可以选择不同的网络爬虫技术。

《最新出炉》系列入门篇-Python+Playwright自动化测试-47-自动滚动到元素出现的位置

1.简介 在我们日常工作中或者生活中,经常会遇到我们的页面内容较多,一个屏幕范围无法完整展示内容,我们就需要滚动滚动条去到我们想要的地方,如下图页面,我们虽然在豆瓣首页,但是内容并不完整,如果我们想要直接点击电影模块中的选电影按钮,是需要往下滑动的。当页面超过屏幕的高度时候,需要滚动到元素出现的位置