使用 Python 批量重命名文件:移除文件名中的特定部分

使用 Python 批量重命名文件:移除文件名中的特定部分

本教程详细介绍了如何使用 python 脚本批量重命名文件,通过移除文件名中特定的前缀或部分来标准化文件命名。文章将指导您如何利用 `os` 模块进行文件操作,并结合 `fnmatch` 模块进行模式匹配,从而高效、安全地处理大量文件。内容涵盖了从环境设置到代码实现,以及重要的注意事项和最佳实践,确保您能够准确无误地完成文件重命名任务。

在文件管理中,经常需要对大量文件进行批量重命名,例如移除文件名中多余的前缀或不必要的字符。Python 提供了强大而灵活的工具来自动化这一过程。本文将详细讲解如何利用 os 和 fnmatch 模块,通过移除文件名中的特定部分来批量重命名文件。

核心概念与所需模块

要实现文件重命名,我们主要依赖以下两个 Python 内置模块:

os 模块:提供了与操作系统交互的功能,包括文件和目录操作,如创建、删除、移动和重命名文件。其中 os.rename() 函数是执行文件重命名的关键。fnmatch 模块:用于 Unix shell 风格的文件名模式匹配。它允许我们使用通配符(如 * 和 ?)来筛选符合特定模式的文件,这在处理大量文件名时非常有用。

逐步实现文件重命名

以下是使用 Python 移除文件名特定部分的具体步骤和示例代码。

步骤一:导入必要的模块

首先,我们需要导入 os 和 fnmatch 模块。

立即学习“Python免费学习笔记(深入)”;

import osimport fnmatch

步骤二:指定目标文件夹

确定包含需要重命名文件的文件夹路径。为了代码的通用性和安全性,建议使用绝对路径或确保脚本在正确的工作目录下运行。

# 示例:假设图片文件夹名为 'images',且与脚本位于同一目录下image_folder = "images" # 如果文件夹在其他位置,可以使用绝对路径,例如:# image_folder = "/path/to/your/images/folder"

步骤三:遍历并筛选文件

使用 os.listdir() 获取文件夹中的所有文件和子目录,然后结合 fnmatch.filter() 来筛选出符合特定模式的文件。例如,如果我们要处理以 “IM00” 开头且扩展名为 “.jpg” 的文件,可以使用模式 *IM00*.jpg。

# 遍历文件夹中所有文件名包含 "IM00" 且以 ".jpg" 结尾的文件for filename in fnmatch.filter(os.listdir(image_folder), "*IM00*.jpg"):    # 后续重命名逻辑将在此处执行    pass

这里的 *IM00*.jpg 模式会匹配任何包含 “IM00” 且以 “.jpg” 结尾的文件,例如 IM001.jpg、IMG_IM00_001.jpg 等。如果只想匹配以 “IM00” 开头的文件,可以使用 IM00*.jpg。

Python之模块学习 中文WORD版 Python之模块学习 中文WORD版

本文档主要讲述的是Python之模块学习;python是由一系列的模块组成的,每个模块就是一个py为后缀的文件,同时模块也是一个命名空间,从而避免了变量名称冲突的问题。模块我们就可以理解为lib库,如果需要使用某个模块中的函数或对象,则要导入这个模块才可以使用,除了系统默认的模块(内置函数)不需要导入外。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看

Python之模块学习 中文WORD版 2 查看详情 Python之模块学习 中文WORD版

步骤四:移除文件名中的特定部分

一旦筛选出目标文件,下一步就是修改文件名。Python 的字符串切片(string slicing)功能非常适合此任务。例如,要移除前四个字符(如 “IM00″),可以使用 filename[4:]。

    # 假设要移除前缀 "IM00",它占据了文件名的前4个字符    # new_filename 将是原始文件名从第5个字符开始的部分    # 例如,如果 filename 是 "IM001.jpg",则 new_filename 将是 "1.jpg"    new_filename = filename[4:]

请注意,filename[4:] 假定要移除的部分始终位于文件名的开头且长度固定。如果需要更灵活地移除特定字符串,可以使用 str.replace() 方法,例如 filename.replace(“IM00”, “”)。

步骤五:执行文件重命名

最后,使用 os.rename() 函数将旧文件名更改为新文件名。为了确保路径的正确性,特别是当文件不在脚本的当前工作目录时,务必使用 os.path.join() 来构建完整的文件路径。

    # 构建旧文件的完整路径    old_file_path = os.path.join(image_folder, filename)    # 构建新文件的完整路径    new_file_path = os.path.join(image_folder, new_filename)    # 执行重命名操作    os.rename(old_file_path, new_file_path)

完整示例代码

将以上步骤整合,得到一个完整的脚本:

import osimport fnmatchdef remove_prefix_and_rename(folder_path, prefix_to_remove, pattern="*"):    """    遍历指定文件夹,移除匹配文件名前缀并重命名。    Args:        folder_path (str): 包含文件的文件夹路径。        prefix_to_remove (str): 要从文件名中移除的前缀字符串。        pattern (str): 用于筛选文件的fnmatch模式,默认为所有文件("*")。    """    print(f"正在处理文件夹: {folder_path}")    print(f"将移除前缀: '{prefix_to_remove}'")    if not os.path.isdir(folder_path):        print(f"错误: 文件夹 '{folder_path}' 不存在。")        return    prefix_len = len(prefix_to_remove)    renamed_count = 0    try:        # 遍历文件夹中所有符合模式的文件        for filename in fnmatch.filter(os.listdir(folder_path), pattern):            # 检查文件是否以指定前缀开头            if filename.startswith(prefix_to_remove):                old_file_path = os.path.join(folder_path, filename)                # 移除前缀,获取新的文件名                # 这里假设前缀是固定的,并且位于文件名的开头                new_filename = filename[prefix_len:]                new_file_path = os.path.join(folder_path, new_filename)                # 确保新文件名不为空,且与旧文件名不同                if new_filename and new_filename != filename:                    print(f"重命名 '{filename}' 为 '{new_filename}'")                    os.rename(old_file_path, new_file_path)                    renamed_count += 1                else:                    print(f"跳过 '{filename}',新文件名无效或与旧文件名相同。")            else:                print(f"跳过 '{filename}',不以 '{prefix_to_remove}' 开头。")        print(f"完成重命名。共重命名了 {renamed_count} 个文件。")    except OSError as e:        print(f"文件操作错误: {e}")    except Exception as e:        print(f"发生未知错误: {e}")# --- 使用示例 ---if __name__ == "__main__":    # 假设您的图片文件夹名为 'images',且与脚本在同一目录下    # 或者提供完整的路径,例如: "/Users/youruser/Desktop/my_images"    target_folder = "images"     # 要移除的前缀    target_prefix = "IM00"     # 筛选文件的模式,例如只处理 .jpg 文件    # 如果想处理所有文件,可以使用 "*"    file_pattern = "*IM00*.jpg"     remove_prefix_and_rename(target_folder, target_prefix, file_pattern)    # 另一个示例:移除文件名中的特定字符串,不一定是前缀    # def remove_specific_string_and_rename(folder_path, target_string, pattern="*"):    #     print(f"正在处理文件夹: {folder_path}")    #     print(f"将移除字符串: '{target_string}'")    #     if not os.path.isdir(folder_path):    #         print(f"错误: 文件夹 '{folder_path}' 不存在。")    #         return    #     renamed_count = 0    #     try:    #         for filename in fnmatch.filter(os.listdir(folder_path), pattern):    #             if target_string in filename:    #                 old_file_path = os.path.join(folder_path, filename)    #                 new_filename = filename.replace(target_string, "")    #                 new_file_path = os.path.join(folder_path, new_filename)    #                 if new_filename and new_filename != filename:    #                     print(f"重命名 '{filename}' 为 '{new_filename}'")    #                     os.rename(old_file_path, new_file_path)    #                     renamed_count += 1    #                 else:    #                     print(f"跳过 '{filename}',新文件名无效或与旧文件名相同。")    #             else:    #                 print(f"跳过 '{filename}',不包含 '{target_string}'。")    #         print(f"完成重命名。共重命名了 {renamed_count} 个文件。")    #     except OSError as e:    #         print(f"文件操作错误: {e}")    #     except Exception as e:    #         print(f"发生未知错误: {e}")    # # remove_specific_string_and_rename(target_folder, "_copy", "*.txt")

注意事项与最佳实践

在执行批量文件操作时,务必谨慎,以避免数据丢失或意外修改。

备份数据:在运行任何文件重命名脚本之前,强烈建议备份您的文件或在文件的副本上进行测试。这是最重要的预防措施。先预览,再执行:在实际调用 os.rename() 之前,可以先打印出旧文件名和新文件名,检查它们是否符合预期。

# ... 在 os.rename 之前 ...print(f"将要重命名: '{old_file_path}' -> '{new_file_path}'")# os.rename(old_file_path, new_file_path) # 暂时注释掉这行

确认无误后再取消注释执行。

处理文件扩展名:上述示例直接对整个文件名进行操作,这可能会影响文件扩展名。如果需要更精细地处理,可以使用 os.path.splitext() 来分离文件名和扩展名。

base_name, extension = os.path.splitext(filename)if base_name.startswith("IM00"):    new_base_name = base_name[4:]    new_filename = new_base_name + extension    # ... 进行重命名 ...

错误处理:使用 try-except 块来捕获可能发生的 OSError(例如,文件不存在、权限问题、目标文件名已存在等),从而提高脚本的健壮性。跨平台兼容性:os.path.join() 会根据操作系统自动选择正确的路径分隔符(Windows 是 ,Unix/macOS 是 /),因此使用它构建路径可以确保脚本的跨平台兼容性。避免文件名冲突:确保生成的新文件名在目标文件夹中是唯一的,否则 os.rename() 可能会覆盖现有文件或引发错误。本示例中,如果 IM001.jpg 和 1.jpg 同时存在,重命名 IM001.jpg 为 1.jpg 将会覆盖原有的 1.jpg。灵活性:如果需要移除的字符串不总是在开头,或者字符串本身不固定,可以使用 str.replace() 方法,例如 new_filename = filename.replace(“要移除的字符串”, “”)。

总结

通过 os 模块进行文件操作和 fnmatch 模块进行模式匹配,Python 提供了一种强大且灵活的方式来批量重命名文件。理解这些核心工具并遵循最佳实践,可以帮助您高效、安全地管理文件,大大提高工作效率。在执行任何批量操作前,请务必进行充分的测试和备份。

以上就是使用 Python 批量重命名文件:移除文件名中的特定部分的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/907350.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
爱发电WEB端官方登录地址 爱发电在线平台网址链接
上一篇 2025年11月29日 00:01:51
u盘怎么删除不要的文件
下一篇 2025年11月29日 00:01:58

相关推荐

  • win7电脑为什么分辨率怎么调不过来?

    win7电脑为什么分辨率怎么调不过来?win7电脑为什么分辨率怎么调不过来?win7电脑为什么分辨率怎么调不过来?win7电脑为什么分辨率怎么调不过来?

    在使用win7系统时,有些用户可能会遇到无法顺利调整电脑分辨率的问题,但其实解决这个问题非常简单。如果您想详细了解具体的调整步骤,请耐心阅读以下内容。 win7电脑分辨率调整的最佳方法: 在桌面空白处单击鼠标右键,找到并点击【屏幕分辨率(C)】。 进入设置界面后,可以看到【分辨率(R)】选项,点击后…

    2026年9月1日 用户投稿
    000
  • 如何解决TYPO3CMS项目中核心功能扩展问题?Composer可以帮你!

    可以通过以下地址学习Composer:学习地址 在开发typo3 cms项目时,我常常需要扩展其核心功能,以满足特定需求。然而,如何高效地管理这些扩展,一直是我头疼的问题。作为一个初学者,我尝试过手动修改核心代码,但这不仅复杂,而且容易导致版本控制问题。 在不断摸索中,我发现了Composer这个强…

    用户投稿 2026年9月1日
    000
  • windows10提示“你已使用临时配置文件登录”_windows10临时配置文件问题修复方法

    1、重启系统6到8次尝试自动修复;2、删除注册表ProfileList下的Default项;3、通过系统属性删除临时配置文件;4、创建新账户并迁移旧数据;5、运行chkdsk和sfc修复磁盘与系统文件。 如果您在登录Windows 10时看到“你已使用临时配置文件登录”的提示,说明系统未能正确加载您…

    2026年9月1日
    000
  • 小红书原创认证有什么用?小红书原创是什么意思

    在这个信息爆炸的时代,小红书作为一个热门的社交电商平台,吸引了越来越多的用户和品牌入驻。而在小红书平台上,原创认证是一个备受关注的话题。小红书的原创认证究竟有什么用呢?今天,我们就来详细探讨一下。 一、什么是小红书原创认证? 我们来了解一下什么是小红书原创认证。小红书原创认证是指小红书平台对创作者在…

    2026年9月1日
    000
  • 玩转Liunx系统,看这篇文章就够了(一)

    ?大家好!我是你们的老朋友java学术趴。相信大家对windows系统已经非常熟悉了,那么今天小编就带大家探索一下linux系统。小编花了一个星期的时间整理了一些linux的干货,由于内容较多,我会分几期发布。话不多说,直接进入今天的主题:linux系统。linux,全称gnu/linux,是一种免…

    2026年9月1日
    000
  • 如何解决前端开发中的响应式设计问题?使用Composer可以引入Bootstrap5框架!

    可以通过以下地址学习 Composer:学习地址 在处理前端开发的响应式设计时,我遇到了一个棘手的问题:网站的布局在手机和平板上显示得并不理想。无论我如何调整 css,总是无法完美地适应所有设备。尝试了多种方法后,我决定使用 bootstrap 5 框架来解决这个问题。 Bootstrap 是一个非…

    用户投稿 2026年9月1日
    000
  • 驱动人生如何修复驱动问题?驱动人生修复驱动问题的有效方法

    驱动人生修复驱动问题的方法是:1. 启动软件进行驱动扫描,自动检测存在问题或需更新的驱动;2. 选择“一键修复”或“一键更新”自动下载安装最新驱动,或单独修复特定硬件驱动;3. 可手动选择并安装特定版本驱动以确保稳定性;4. 更新前使用驱动备份功能,便于出现问题时还原;5. 修复前检查硬件连接是否正…

    2026年9月1日
    000
  • 开发AI品控生鲜App:看图识新鲜度

    生鲜行业面临的一大挑战是高损耗率,其根源常在于品质管理的延迟性和主观判断。以往依靠人工经验进行的“望闻问切”方式不仅效率低,还容易因标准不统一而引发争议和浪费。在此背景下,“开发ai品控生鲜app”应运而生,尤其是其核心功能——图像识别新鲜度,为整个行业带来了科技变革的力量。 这款智能生鲜App如何…

    2026年9月1日
    000
  • windows10系统怎么修改计算机名称

    windows10系统怎么修改计算机名称windows10系统怎么修改计算机名称windows10系统怎么修改计算机名称windows10系统怎么修改计算机名称

    大家都清楚,每一台电脑都有属于自己的名字,有些用户想更改电脑的名字,但在升级到win10系统后,却发现找不到修改电脑名字的界面,不知道该如何下手。针对这种情况,小编就给大家分享具体的操作步骤吧。 具体步骤如下: 1、按下Win+i键打开Windows系统的设置界面,然后点击左侧菜单中的“系统”选项;…

    2026年9月1日 用户投稿
    100
  • win7系统任务栏时钟不准确_win7时间同步失败的修复步骤

    win7系统任务栏时钟不准确_win7时间同步失败的修复步骤win7系统任务栏时钟不准确_win7时间同步失败的修复步骤win7系统任务栏时钟不准确_win7时间同步失败的修复步骤win7系统任务栏时钟不准确_win7时间同步失败的修复步骤

    win7任务栏时钟不准确的解决方法如下:1. 检查internet时间同步设置,确保勾选“与internet时间服务器同步”,可更换服务器如time.nist.gov,并点击“立即更新”;2. 检查防火墙设置,允许“windows 时间”通过防火墙,必要时手动添加svchost.exe;3. 检查w…

    2026年9月1日 用户投稿
    000
  • 如何解决PHP项目中的异步编程难题?React/Async助你优化效率

    可以通过以下地址学习 Composer:学习地址 在开发一个需要高并发处理的 php 项目时,我遇到了一个棘手的问题:如何在 php 中实现异步编程以提高程序的响应速度和效率。传统的同步编程方式在处理大量请求时显得力不从心,导致程序响应缓慢,甚至出现超时错误。我尝试了多种方法,但都未能有效解决,直到…

    用户投稿 2026年9月1日
    100
  • 如何解决WordPress配置文件的修改难题?使用Composer安装wp-cli/wp-config-transformer可以!

    可以通过以下地址学习 Composer:学习地址 在管理 wordpress 网站的过程中,wp-config.php 文件的修改一直是一个挑战。这不仅仅是因为文件内容复杂,更是因为手动修改时稍有不慎就可能导致网站崩溃。曾经,我尝试手动编辑这个文件,结果因为一个小小的语法错误,导致整个网站瘫痪,花费…

    用户投稿 2026年9月1日
    100
  • 详解VSCode LaTeX文档编写与编译环境

    首先安装TeX发行版,再在VSCode中安装LaTeX Workshop插件,配置xelatex编译配方,启用PDF预览与SyncTeX同步,设置外部阅读器(可选),最后通过%!TEX root指定主文件实现多文件管理。 在使用 VSCode 编写 LaTeX 文档时,搭建一个高效、稳定的编译环境是…

    2026年9月1日
    300
  • 设计系统搭建:大型Pad应用的协同方案

    在沉浸式体验日益重要的当下,大型pad应用已广泛应用于教育、设计及企业服务等多个领域,成为关键的交互平台。然而,由于界面复杂、交互多样以及多团队协作机制的存在,常导致设计风格不统一、开发效率低下等问题。此时,构建设计系统便成为保障大型pad应用高质量交付的核心协同路径。 大型Pad应用开发中的常见协…

    2026年9月1日
    200
  • heatmap.js热力图绘制:如何解决边界数据点导致的`getImageData`错误?

    heatmap.js热力图绘制:巧妙解决边界数据点引发的getImageData错误 使用heatmap.js库绘制热力图时,经常会遇到边界数据点导致错误的问题。本文将分析一个典型案例,并提供有效的解决方案。该案例中,当数据点坐标加上半径等于或超过画布尺寸时,会抛出failed to execute…

    2026年9月1日
    100
  • Win10更新出现错误代码0x800f081f怎么解决

    Win10更新出现错误代码0x800f081f怎么解决Win10更新出现错误代码0x800f081f怎么解决Win10更新出现错误代码0x800f081f怎么解决Win10更新出现错误代码0x800f081f怎么解决

    最近有用户向小编反馈称,在升级win10系统时遇到了错误代码0x800f081f的问题。据小编分析,这可能是由于电脑硬件与系统的兼容性不佳,或是系统更新过程中出现了某些内部故障所引起的。以下是三个实用的解决办法,遇到类似问题的用户可以参考一下。 解决方法一: 点击开始菜单,输入“cmd”,右键选择“…

    2026年9月1日 用户投稿
    200
  • 168.31.1小米路由器手机端配置指南

    可以直接在手机上配置小米路由器,首先下载小米wifi app;2. 将路由器通电并等待指示灯黄灯闪烁;3. 手机连接以“xiaomi”开头的默认wifi网络;4. 打开小米wifi app并添加路由器;5. 根据宽带类型选择上网方式(dhcp、pppoe或静态ip);6. 设置自定义wifi名称和密…

    2026年9月1日
    200
  • 百度网盘如何整理海量文件 百度网盘高效分类管理的方法

    分类清晰、命名规范、善用工具是管理百度网盘文件的核心。首先建立“工作/学习/个人生活”等一级文件夹,并按项目或年份细分二级目录,控制层级在三层内;其次制定统一命名规则,采用“日期_主题_版本”格式并加入关键词,确保文件一目了然;再通过标签标记“待审核”“已归档”等状态,结合搜索功能快速定位;最后定期…

    2026年9月1日
    100
  • 消息称微软自研 AI 芯片遇阻,拟修改线路图 2027 年推出 Maia 280 应对英伟达竞争

    感谢网友 华南吴彦祖 的线索投递! 7 月 3 日消息,据外媒 The Information 报道,微软在自研 AI 芯片设计上遇到一系列问题,同时担心相应业务遭到其他竞争对手超越,因此预计将更新线路图,在 2027 年推出一款“相对折衷”的 AI 芯片,以应对外界压力。 ▲ 微软目前的 Maia…

    2026年9月1日
    200
  • deepseek怎么链接到wps详细教程

    本文将详细介绍如何将「Deepseek」文件转换工具成功链接到「WPS Office」软件中。通过简单的步骤,用户将能够直接在「WPS Office」中访问和使用「Deepseek」功能,提升办公效率和文件处理能力。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSe…

    2026年9月1日
    100

发表回复

登录后才能评论
关注微信