Python根据Excel表进行文件重命名
一、问题背景
在日常办公过程中,批量重命名是经常使用的操作。之前我们已经进行了初步探索,主要是通过批处理文件、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"
"G:\桌面\用Python给文件进行批量重命名\BBB.txt"
"G:\桌面\用Python给文件进行批量重命名\CCC.txt"
把上面的内容复制到Excel中,按"\"和引号进行【分列】操作,最后得到【111.txt, 222.txt, 333.txt】这样的文件名,然后放到A列中,如下图所示:
批量重命名Excel文件
Excel表中,A列为旧的文件名, B列为新的文件名,我们可以手动对新文件名进行修改,然后通过Python读取txg每一行,把A列文件名重命名为B列对应的文件名。
3. 问题的解决
下一步,我们就可以采用Python编写对应代码:读取Excel文件中的A列和B列内容,然后遍历当前目录下的指定文件,采用os.rename()对文件进行重命名。
第一种方法:使用xlwings——过程有点儿复杂
原理就是读取file_name.xlsx文件中的内容,然后遍历每一行后,用os.rename()进行重命名。
import os
import xlwings as xw
name_path = r'file_name.xlsx'
# 打开工作簿
app = xw.App(visible=False, add_book=False)
app.display_alerts = False # 关闭一些提示信息,可以加快运行速度。 默认为 True
app.screen_updating = False # 更新显示工作表的内容。默认为 True。关闭它也可以提升运行速度
wb = app.books.open(name_path)
# 获取数据源表格
sht = wb.sheets['name']
col_data_old = sht.range('A2:A200').value # 旧文件名,A列
col_data_new = sht.range('B2:B200').value # 新文件名,B列
# 重命名
for i in range(len(col_data_new)):if col_data_old[i] is not None and col_data_new[i] is not None:# 如果单元格值不是 None,则处理这些值file_name = os.path.abspath(col_data_old[i])file_rename = os.path.abspath(col_data_new[i])os.rename(file_rename, file_name)
# 保存表格并退出
wb.save()
wb.close()
app.quit()
第二种方法:采用openpyxl——简化代码
相比xlwings,openpyxl的代码更为简单,逻辑也很清晰。导入模块,打开工作簿,获取表格的内容,循环每一行,读取非空数据,然后用os.rename()进行重命名。
import os
import openpyxl
name_path = r'file_name.xlsx'
# 打开工作簿
wb = openpyxl.load_workbook(name_path)
# 获取数据源表格
sht = wb.worksheets[0]
# 获取 A 列和 B 列的最大行数
max_row = max(sht.max_row, sht.max_column)
# 遍历 A 列和 B 列,将非空数据添加到字典中
for row in range(2, max_row + 1):key = sht.cell(row=row, column=1).valuevalue = sht.cell(row=row, column=2).valueif key is not None and value is not None:file_name = os.path.abspath(key)file_rename = os.path.abspath(value)os.rename(file_name, file_rename)
第三种方法:Pandas法——进一步简化
pandas这个模块导入虽然有点儿慢,但是它的重命名代码量最少,搭配上pathlib,命名效率更高。实现过程是导入pandas和path模块,读取Excel文件,把A列和B列转化为一一对应的字典,然后遍历Excel表的每一行进行批量重命名。
from pathlib import Path
import pandas as pd# 文件路径
name_path = Path('file_name.xlsx')# 读取 Excel 文件
df = pd.read_excel(name_path)# 将 A 列和 B 列数据转换为字典
data_dict = df.set_index(df.columns[0]).squeeze().to_dict()# 遍历字典,执行文件重命名
for key, value in data_dict.items():if pd.notna(key) and pd.notna(value):file_name = Path(key).absolute() # 获取原文件的绝对路径file_rename = Path(value).absolute()file_name.rename(file_rename)
以上代码中,首先将 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,为后期学习数据分析打下基础。
相关文章:

Python根据Excel表进行文件重命名
一、问题背景 在日常办公过程中,批量重命名是经常使用的操作。之前我们已经进行了初步探索,主要是通过批处理文件、renamer软件或者Python中的pathlib等模块对当前目录下的文件进行批量重命名。 而今天我们要使用的是PythonExcel的方法对指定目录下的文…...

【UVM源码】UVM Config_db机制使用总结与源码解析
UVM Config_db机制使用总结与源码解析 UVM Config_db机制介绍UVM Config_db 机制引入的背景基本介绍使用方法优缺点: UVM Config_db机制使用示例:UVM Config_db使用高阶规则Config_db资源优先级 UVM Config_db 源码解析 UVM Config_db机制介绍 UVM Conf…...

群辉开启WebDav服务+cpolar内网穿透实现移动端ES文件浏览器远程访问本地NAS文件
文章目录 1. 安装启用WebDAV2. 安装cpolar3. 配置公网访问地址4. 公网测试连接5. 固定连接公网地址6. 使用固定地址测试连接 本文主要介绍如何在群辉中开启WebDav服务,并结合cpolar内网穿透工具生成的公网地址,通过移动客户端ES文件浏览器即可实现移动设…...
通过mybatis拦截器给sql执行加一个耗时监控
代码没什么内容,直接贴上来吧,其中costTimeUtil可以看我的另一篇博文:java实现一个不带次数变量的加权平均值算法-CSDN博客 Slf4j Intercepts({Signature(type StatementHandler.class,method "query",args {Statement.class, …...

构建知识图谱:从技术到实战的完整指南
目录 一、概述二、知识图谱的基础理论定义与分类核心组成历史与发展 三、知识获取与预处理数据源选择数据清洗实体识别 四、知识表示方法知识表示模型RDFOWL属性图模型 本体构建关系提取与表示 五、知识图谱构建技术图数据库选择Neo4jArangoDB 构建流程数据预处理实体关系识别图…...

STM32的分类和选型
F系列(主要用于普通应用) STM32F0xx:低成本、低功耗,适用于成本敏感和低功耗的应用。STM32F1xx:中低端微控制器,具有丰富的外设和良好的性能。STM32F2xx:高性能微控制器,适用于要求…...
python使用read_sql与to_sql读写数据库
文章目录 详细说明示例程序 详细说明 使用pandas读写数据库的方法(以Mysql为例)如下: 首先是打包一个工具函数: import pandas as pd import numpy as np from sqlalchemy import create_engine, textdef get_sql_engine():# 数据…...

【ArcGIS微课1000例】0096:dem三维块状表达(层次地形模型)
文章目录 一、DEM表达方式二、层次模型表达三、注意事项一、DEM表达方式 DEM数字高程模型的表达方式通常有以下4种: 1. 规则格网 2. 不规则三角网 3. 等高线 4. 层次地形模型 作为栅格地理数据,DEM 数据具有2.5维的特征,能够以三维表面的形式进行三维空间表达。但受其数…...

OJ_糖果分享游戏
题干 c实现 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<vector> using namespace std;void ShareCandy(vector<int>& student) {int size student.size();vector<int> share(size); //保存每个同学交换前,糖果数量…...

sqli-lbs靶场搭建
目录 环境小皮源码下载 1.源码解压: 2.搭建网站 2.1点击创建网站 2.2修改sql-connections\db-creds.inc 2.3重新启动 3.访问你设置的域名 3.1点击启动数据库配置 3.2返回第一个页面(开启题目) sqlilbs靶场搭建 环境小皮源码下载 下载地址&am…...

SharedPreferences卡顿分析
SP的使用及存在的问题 SharedPreferences(以下简称SP)是Android本地存储的一种方式,是以key-value的形式存储在/data/data/项目包名/shared_prefs/sp_name.xml里,SP的使用示例及源码解析参见:Android本地存储之SharedPreferences源码解析。以…...

64、ubuntu使用c++/python调用alliedvisio工业相机
基本思想:需要使用linux系统调用alliedvisio工业相机完成业务,这里只做驱动相机调用,具体不涉及业务开发 Alvium 相机选型 - Allied Vision 一、先用软件调用一下用于机器视觉和嵌入式视觉的Vimba X 软件开发包 - Allied Vision VimbaX_Set…...
网络端口与 IP 地址有什么区别?
网络端口和IP地址是计算机网络中两个非常重要的概念,它们在实现网络通信和数据传输中扮演着不同的角色。 IP地址 IP地址(Internet Protocol Address)是用于标识网络上设备的唯一地址。它是一个由数字组成的标识符,用于在网络中准…...
C语言标准的输入输出
目录 1. 格式化输入输出 2. 控制字符串长度 3. 混合格式化输出 4. 格式化浮点数 5. 格式化日期和时间 在C语言编程中,输入输出格式非常重要,它决定了程序如何向用户展示数据以及如何从用户接收数据。本篇博客将介绍C语言输入输出格式的一些基本概念…...

C++ 类与对象(上)
目录 本节目标 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 4.类的访问限定符及封装 4.1 访问限定符 4.2 封装 5. 类的作用域 6. 类的实例化 7.类对象模型 7.1 如何计算类对象的大小 7.2 类对象的存储方式猜测 7.3 结构体内存对齐规则 8.this指针 8.1 thi…...

如何配置MacLinuxWindows环境变量
这里写目录标题 什么是环境变量什么是PATH为什么要配置环境变量 如何配置环境变量环境变量有哪些环境变量加载顺序环境变量加载详解 配置参考方法一: export PATHLinux环境变量配置方法二:vim ~/.bashrcLinux环境变量配置方法三:vim ~/.bash_…...

【Linux】从C语言文件操作 到Linux文件IO | 文件系统调用
文章目录 前言一、C语言文件I/O复习文件操作:打开和关闭文件操作:顺序读写文件操作:随机读写stdin、stdout、stderr 二、承上启下三、Linux系统的文件I/O系统调用接口介绍open()close()read()write()lseek() Linux文件相关重点 复习C文件IO相…...

mask transformer相关论文阅读
前面讲了mask-transformer对医学图像分割任务是非常适用的。本文就是总结一些近期看过的mask-transformer方面的论文。 因为不知道mask transformer是什么就看了一些论文。后来得出结论,应该就是生成mask的transformer就是mask transformer。 相关论文: …...

springboot+vue3支付宝接口案例-第二节-准备后端数据接口
springbootvue3支付宝接口案例-第二节-准备后端数据接口!今天经过2个小时的折腾。准备好了我们这次测试支付宝线上支付接口的后端业务数据接口。下面为大家分享一下,期间发生遇到了一些弯路。 首先,我们本次后端接口使用的持久层框架是JPA。这…...
贪吃蛇游戏设计文档(基于C语言)
1. 引言 本设计文档旨在详细阐述一款2D贪吃蛇游戏的设计思路、功能模块划分以及具体实现要点。通过严谨的需求分析与清晰的架构设计,确保游戏开发过程有序进行,并最终打造出一款用户友好、稳定流畅的经典贪吃蛇游戏。 2. 需求分析 2.1 核心元素 - 蛇&…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
vue3 daterange正则踩坑
<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...

Python训练营-Day26-函数专题1:函数定义与参数
题目1:计算圆的面积 任务: 编写一个名为 calculate_circle_area 的函数,该函数接收圆的半径 radius 作为参数,并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求:函数接收一个位置参数 radi…...
使用python进行图像处理—图像滤波(5)
图像滤波是图像处理中最基本和最重要的操作之一。它的目的是在空间域上修改图像的像素值,以达到平滑(去噪)、锐化、边缘检测等效果。滤波通常通过卷积操作实现。 5.1卷积(Convolution)原理 卷积是滤波的核心。它是一种数学运算,…...