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
相关产品推荐
相关产品推荐

