You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现将文件名开头的年份字符串移至文件名末尾

Python实现将文件名开头的年份字符串移至文件名末尾

嘿,我看你已经迈出第一步啦,只是还没搞定把提取的年份移到末尾的环节对吧?别着急,咱们可以用正则表达式来灵活处理不同格式的文件名,完美实现你想要的效果~

首先先说说你原代码里的小问题:用os.chdir(root)其实没必要,而且如果遍历多个目录可能会出问题,咱们直接用os.path.join(root, f)就能拿到文件的完整路径,操作起来更稳妥。

接下来是核心思路:你的文件名都是4位年份开头,后面跟着下划线、连字符或者空格,然后是文件名主体,最后是扩展名。咱们可以用正则把年份、主体、扩展名分别提取出来,再重新拼接成主体_年份.扩展名的格式。

下面是完整的实现代码:

import os
import re

# 替换成你的目标路径
PATH = "/your/target/path"

# 定义正则匹配模式:匹配开头的4位年份,分隔符(_/-/空格),主体,扩展名
pattern = r'^(\d{4})[_\- ]+(.*?)(\.\w+)$'

for root, dirs, files in os.walk(PATH):
    for filename in files:
        # 匹配文件名是否符合我们的格式
        match = re.match(pattern, filename)
        if match:
            # 提取分组内容:年份、主体、扩展名
            year = match.group(1)
            name_body = match.group(2)
            ext = match.group(3)
            # 构造新的文件名
            new_filename = f"{name_body}_{year}{ext}"
            # 拼接完整的新旧文件路径
            old_path = os.path.join(root, filename)
            new_path = os.path.join(root, new_filename)
            # 执行重命名
            os.rename(old_path, new_path)
            print(f"已重命名:{filename} -> {new_filename}")

代码关键点拆解

  • 灵活的正则匹配:用^(\d{4})[_\- ]+(.*?)(\.\w+)$精准提取年份、文件名主体和扩展名,能适配年份后面的下划线、连字符、空格等多种分隔符
  • 安全的路径处理:使用os.path.join拼接完整路径,避免手动切换目录或者路径分隔符不一致带来的异常
  • 精准的重命名控制:仅对匹配成功的文件执行重命名操作,不会误修改其他不符合格式的文件

用你给出的测试文件名跑这段代码,就能得到你想要的结果:

  • 2023_FamilyDrama.pdf → FamilyDrama_2023.pdf
  • 2024_FamilyDrama.pdf → FamilyDrama_2024.pdf
  • 2022-beachpics.pdf → beachpics_2022.pdf
  • 2020 Hello_world bring fame.pdf → Hello_world bring fame_2020.pdf
  • 2019-this-is-my_doc.pdf → this-is-my_doc_2019.pdf

完全符合你的需求哦~

备注:内容来源于stack exchange,提问作者JodeCharger100

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 16:55:28