【Python小技巧】高效实现文件批量重命名

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个性化解决方案等服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:xf982831907

💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。

在这里插入图片描述

【Python小技巧】高效实现文件批量重命名

  • 一、准备工作
  • 二、基础知识
    • 1. `os` 模块
    • 2. `pathlib` 模块
  • 三、实现思路
  • 四、代码示例
    • 示例 1:添加前缀和后缀
    • 示例 2:按序号重命名
    • 示例 3:替换文件名中的部分字符串
    • 示例 4:使用 `pathlib` 模块
  • 五、错误处理与日志记录
  • 六、总结

在这里插入图片描述


  在日常的文件管理中,批量重命名文件是一项常见且繁琐的任务。无论是整理照片、文档,还是处理数据集,手动一个个地重命名文件不仅耗时,还容易出错。幸运的是,Python 提供了强大的文件操作功能,使得批量重命名文件变得轻松高效。本文将详细介绍如何使用 Python 实现文件批量重命名,并通过实际代码示例展示其强大功能。

一、准备工作

  在开始编写代码之前,确保你的 Python 环境已经安装完毕。同时,考虑到跨平台兼容性,我们推荐使用 Python 内置的 os 模块和 pathlib 模块进行文件操作。这两个模块无需额外安装,即可在大多数操作系统上运行。

二、基础知识

1. os 模块

  os 模块提供了许多与操作系统交互的功能,包括文件和目录的创建、删除、重命名等。在文件重命名方面,os.rename() 函数非常有用。

import os

# 重命名文件
os.rename('旧文件名', '新文件名')

2. pathlib 模块

  pathlib 是 Python 3.4 引入的一个模块,用于面向对象地处理文件系统路径。相比 os 模块,pathlib 的代码更加简洁、易读。

from pathlib import Path

# 创建 Path 对象
p = Path('文件名.txt')

# 重命名文件
p.rename('新文件名.txt')

三、实现思路

  批量重命名文件的实现思路可以概括为以下几个步骤:

  1. 遍历指定目录,获取所有需要重命名的文件。
  2. 根据一定的规则(如添加前缀、后缀,替换部分字符串等)生成新的文件名。
  3. 使用 os.rename()Path.rename() 函数进行重命名操作。
  4. 记录重命名日志,以便后续验证。

四、代码示例

  下面,我们通过几个具体的例子来展示如何实现文件批量重命名。

示例 1:添加前缀和后缀

  假设我们有一个目录 images/,里面存放了多张图片文件,我们希望给这些图片文件名添加前缀 pic_ 和后缀 _new

import os

# 指定目录
directory = 'images/'

# 遍历目录中的所有文件
for filename in os.listdir(directory):
    # 构造旧文件路径
    old_path = os.path.join(directory, filename)
    
    # 检查是否为文件(排除目录)
    if os.path.isfile(old_path):
        # 构造新文件名(添加前缀和后缀)
        new_filename = f'pic_{filename}_new'
        # 构造新文件路径
        new_path = os.path.join(directory, new_filename)
        
        # 重命名文件
        os.rename(old_path, new_path)
        print(f'Renamed: {old_path} -> {new_path}')

示例 2:按序号重命名

  有时候,我们可能希望将文件按序号进行重命名,例如 file1.txt, file2.txt, file3.txt 等。

import os

# 指定目录
directory = 'docs/'

# 获取目录中的所有文件(按文件名排序)
files = sorted(os.listdir(directory))

# 遍历文件列表
for index, filename in enumerate(files):
    # 构造旧文件路径
    old_path = os.path.join(directory, filename)
    
    # 检查是否为文件(排除目录)
    if os.path.isfile(old_path):
        # 构造新文件名(按序号重命名)
        new_filename = f'file{index + 1}.txt'
        # 构造新文件路径
        new_path = os.path.join(directory, new_filename)
        
        # 重命名文件
        os.rename(old_path, new_path)
        print(f'Renamed: {old_path} -> {new_path}')

示例 3:替换文件名中的部分字符串

  假设我们有一批文件名中包含特定的字符串,我们希望将这些字符串替换为其他字符串。

import os

# 指定目录
directory = 'texts/'

# 需要替换的字符串和替换后的字符串
old_str = 'old'
new_str = 'new'

# 遍历目录中的所有文件
for filename in os.listdir(directory):
    # 构造旧文件路径
    old_path = os.path.join(directory, filename)
    
    # 检查是否为文件(排除目录)
    if os.path.isfile(old_path):
        # 构造新文件名(替换字符串)
        new_filename = filename.replace(old_str, new_str)
        # 构造新文件路径
        new_path = os.path.join(directory, new_filename)
        
        # 重命名文件
        os.rename(old_path, new_path)
        print(f'Renamed: {old_path} -> {new_path}')

示例 4:使用 pathlib 模块

  使用 pathlib 模块实现上述示例中的第三个例子(替换文件名中的部分字符串)。

from pathlib import Path

# 指定目录
directory = Path('texts/')

# 需要替换的字符串和替换后的字符串
old_str = 'old'
new_str = 'new'

# 遍历目录中的所有文件
for file_path in directory.iterdir():
    # 检查是否为文件(排除目录)
    if file_path.is_file():
        # 构造新文件名(替换字符串)
        new_file_name = file_path.name.replace(old_str, new_str)
        # 构造新文件路径
        new_file_path = directory / new_file_name
        
        # 重命名文件
        file_path.rename(new_file_path)
        print(f'Renamed: {file_path} -> {new_file_path}')

五、错误处理与日志记录

  在实际应用中,我们还需要考虑错误处理和日志记录,以确保代码的健壮性和可维护性。例如,可以使用 try-except 块来捕获并处理可能发生的异常,如文件不存在、权限不足等。同时,可以将重命名操作的结果记录到日志文件中,以便后续验证和调试。

import os
import logging

# 配置日志记录
logging.basicConfig(filename='rename_log.txt', level=logging.INFO, 
                    format='%(asctime)s - %(levelname)s - %(message)s')

# 指定目录
directory = 'texts/'

# 需要替换的字符串和替换后的字符串
old_str = 'old'
new_str = 'new'

# 遍历目录中的所有文件
for filename in os.listdir(directory):
    old_path = os.path.join(directory, filename)
    
    # 检查是否为文件(排除目录)
    if os.path.isfile(old_path):
        new_filename = filename.replace(old_str, new_str)
        new_path = os.path.join(directory, new_filename)
        
        try:
            # 重命名文件
            os.rename(old_path, new_path)
            logging.info(f'Renamed: {old_path} -> {new_path}')
        except Exception as e:
            logging.error(f'Failed to rename {old_path}: {e}')

六、总结

  本文介绍了如何使用 Python 实现文件批量重命名,包括使用 os 模块和 pathlib 模块进行文件操作的基本方法。通过几个具体的示例,展示了如何根据不同的需求实现文件名的批量修改。同时,强调了错误处理和日志记录的重要性,以确保代码的健壮性和可维护性。希望这些内容对你有所帮助,让你在文件管理中更加高效、便捷。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/919889.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ES分词环境实战

文章目录 安装下载1.1 下载镜像1.2 单节点启动 防火墙设置异常处理【1】iptable链路中断 参考文档 参加完2024年11月软考,对ES的分词进行考查,前期有【 Docker 环境下安装部署 Elasticsearch 和 kibana】和【 Docker 环境下为 Elasticsearch 安装IK 分…

华为云stack网络服务流量走向

1.同VPC同子网同主机内ECS间互访流量走向 一句话通过主机内部br-int通信 2.同VPC同子网跨主机ECS间互访流量走向 3.同VPC不同子网同主机ECS间互访流量走向 去往本机的mac地址都记录在br-tun流表里 4.同VPC不同子网跨主机ECS间互访流量走向 5.对等连接流量走向(跨V…

计算机网络:运输层 —— TCP 的拥塞控制

文章目录 TCP的拥塞控制拥塞控制的基本方法流量控制与拥塞控制的区别拥塞控制分类闭环拥塞控制算法 TCP的四种拥塞控制方法(算法)窗口慢开始门限慢开始算法拥塞避免算法快重传算法快恢复算法 TCP拥塞控制的流程TCP拥塞控制与网际层拥塞控制的关系 TCP的拥…

利用uniapp开发鸿蒙:运行到鸿蒙模拟器—踩坑合集

从uniapp运行到鸿蒙模拟器上这一步,就有非常多的坑,一些常见的坑,官网都有介绍,就不再拿出来了,这里记录一下官网未记录的大坑 1.运行路径从hbuilderx启动鸿蒙模拟器 解决方法: Windows系统,官…

linux 常用命令指南(存储分区、存储挂载、docker迁移)

前言:由于目前机器存储空间不够,所以‘斥巨资’加了一块2T的机械硬盘,下面是对linux扩容的一系列操作,包含了磁盘空间的创建、删除;存储挂载;docker迁移;anaconda3迁移等。 一、存储分区 1.1 …

layui合并table相同内的行

<table border"1" id"table1" class"layui-table"><thead><tr><th><b>姓名</b></th><th><b>项目</b></th><th><b>任务</b></th><th><b>…

C++刷题强训(day10)--最长回文子串、买股票的最好时期(一)、过河卒

目录 1、最长回文子串 1.1 题目 1.2 思路 1.3 代码实现 2、买卖股票的最好时机 2.1 题目 2.2 思路 2.3 代码实现 3、过河卒 3.1 题目 3.2 思路 3.3 代码实现 1、最长回文子串 1.1 题目 1.2 思路 根据题目可知&#xff0c;在一个长度为n的字符串中求得最长回文子…

【蓝桥杯C/C++】翻转游戏:多种实现与解法解析

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: 蓝桥杯C/C 文章目录 &#x1f4af;题目&#x1f4af;问题分析解法一&#xff1a;减法法解法二&#xff1a;位运算解法解法三&#xff1a;逻辑非解法解法四&#xff1a;条件运算符解法解法五&#xff1a;数组映射法不同解法的比较…

Debezium-BinaryLogClient

文章目录 概要核心流程技术名词解释技术细节小结 概要 BinaryLogClient类&#xff0c;用于连接和监听 MySQL 服务器的二进制日志&#xff08;binlog&#xff09; 核心流程 技术名词解释 ### GTID (Global Transaction Identifier) 理解 #### 定义 GTID&#xff08;Global Tra…

嵌入式linux中QT信号与槽基本操作与实现

大家好,今天主要给大家分享一下,如何使用linux系统上的QT进行界面开发与实现。 第一:QT的信号与槽基本简介 在操作QT的时候,可以使用里面的信号与槽。所谓信号就是一个对象发出的信号,槽就是当这个对象发出这个信号时,对应连接的槽就发被执行或者触发。 进行信号与槽的连…

03 —— Webpack 自动生成 html 文件

HtmlWebpackPlugin | webpack 中文文档 | webpack中文文档 | webpack中文网 安装 npm install --save-dev html-webpack-plugin 下载html-webpack-plugin本地软件包 npm i html-webpack-plugin --save-dev 配置webpack.config.js让webpack拥有插件功能 const HtmlWebpack…

大模型时代的具身智能系列专题(十二)

Robert Platt(波士顿动力) Robert Platt是美国东北大学Helping Hands机器人实验室主任、计算机科学教授。在加入东北大学之前&#xff0c;Platt 曾是麻省理工学院的研究科学家和美国宇航局的机器人工程师。platt博士毕业于马萨诸塞大学阿默斯特分校计算机科学专业。Platt 的工…

【软件测试】设计测试用例的万能公式

文章目录 概念设计测试用例的万能公式常规思考逆向思维发散性思维万能公式水杯测试弱网测试如何进行弱网测试 安装卸载测试 概念 什么是测试用例&#xff1f; 测试⽤例&#xff08;Test Case&#xff09;是为了实施测试⽽向被测试的系统提供的⼀组集合&#xff0c;这组集合包…

uni-app Vue3语法实现微信小程序样式穿透uview-plus框架

1 问题描述 我在用 uni-app vue3 语法开发微信小程序时&#xff0c;在项目中使用了 uview-plus 这一开源 UI 框架。在使用 up-text 组件时&#xff0c;想要给它添加一些样式&#xff0c;之前了解到微信小程序存在样式隔离的问题&#xff0c;也在uview-plus官网-注意事项中找到…

C++(Qt)软件调试---内存分析工具Heob(26)

C(Qt)软件调试—内存分析工具Heob&#xff08;26&#xff09; 文章目录 C(Qt)软件调试---内存分析工具Heob&#xff08;26&#xff09;[toc]1、概述&#x1f41c;2、环境配置&#x1fab2;3、功能说明4、使用Heob分析qt 程序内存泄漏&#x1f9a7;5、使用Heob检测qt 程序野指针…

uni-app快速入门(八)--常用内置组件(上)

uni-app提供了一套基础组件&#xff0c;类似HTML里的标签元素&#xff0c;不推荐在uni-app中使用使用div等HTML标签。在uni-app中&#xff0c;对应<div>的标签是view&#xff0c;对应<span>的是text&#xff0c;对应<a>的是navigator&#xff0c;常用uni-app…

静态时序分析--时序约束

目录 1.时钟约束1.1创建时钟1.2.生成时钟1.3虚拟时钟1.4 最小时钟脉宽 2.I/O延时约束2.1设置输入延时2.2设置输出延时 3.I/O环境建模约束3.1输入驱动建模3.2输出负载建模 4.时序例外4.1多周期路径设置&#xff08;multicycle path&#xff09;4.2伪路径设置&#xff08;false_p…

解决IntelliJ IDEA的Plugins无法访问Marketplace去下载插件

勾选Auto-detect proxy setting并填入 https://plugins.jetbrains.com 代理URL&#xff0c;可以先做检查连接&#xff1a;

自存 sql常见语句和实际应用

关于连表 查询两个表 SELECT * FROM study_article JOIN study_article_review 查询的就是两个表相乘&#xff0c;结果为两个表的笛卡尔积 相这样 这种并不是我们想要的结果 通常会添加一些查询条件 SELECT * FROM study_articleJOIN study_article_review ON study_art…

目录背景缺少vscode右键打开选项

目录背景缺少vscode右键打开选项 1.打开右键管理 下载地址&#xff1a;https://wwyz.lanzoul.com/iZy9G2fl28uj 2.开始搜索框搜索vscode&#xff0c; 找到其源目录 3.目录背景里面&#xff0c; 加入vscode.exe 3.然后在目录背景下&#xff0c; 右键&#xff0c; code就可以打…