python - 如何在 Python 中重命名文件名的一部分
问题描述
我正在尝试使用 Python 重命名许多文件,以便它们遵循如下所示的新命名约定:
~/directory/yyyy + qq + directory_name + ' Letter'.
现在,它们采用以下格式:
~/directory/directory_name + yyyy + qq + ' Letter'.
例如,我有一个名为 的目录/Users/Test/rename_test/Salmon 2
,其中包含以下文件:
/Users/Test/rename_test/Salmon 2/Salmon 2 2013 Q4 Letter.pdf
/Users/Test/rename_test/Salmon 2/Salmon 2 2018 Q1 Letter.pdf
/Users/Test/rename_test/Salmon 2/Salmon 2 2015 Q2 Letter.pdf
我想将所有这些文件重命名为:
/Users/Test/rename_test/Salmon 2/2013 Q4 Salmon 2 Letter.pdf
/Users/Test/rename_test/Salmon 2/2018 Q1 Salmon 2 Letter.pdf
/Users/Test/rename_test/Salmon 2/2015 Q2 Salmon 2 Letter.pdf
我已经研究过 usingos.split
来提取位置[-2]
和[-3]
- 因为它们应该始终是qq和yyyy - 然后通过将它们移动到位置来重命名文件[0]
和[1]
. 但是我有数百个目录和数千个文件,所以我担心一个错字或偏离当前约定的文件可能会导致错误。
那么解决这个问题的最佳方法是什么?
解决方案
您的想法基本上是合理的 - 但您可以添加至少两个步骤以使其更安全:
使用一个正则表达式来检测您的格式并在不匹配时引发错误。例如,您的正则表达式可能如下所示:
^鲑鱼 2 \d{4} Q\d{1} 字母
您需要通过包含当前目录名称的变量替换 Salmon 2
添加“试运行”模式——转换只是打印到标准输出——这样你就可以看到会发生什么。
无论您做什么,请先备份。
奖励:我可能会使用 pathlib 及其命令来完成这项工作 - 它是一个比旧的“文件名只是字符串”方法更通用的接口。
推荐阅读
- excel - 循环填充单独的电子邮件在同一电子邮件中生成电子邮件
- html - 尝试显示图像“已阻止:其他”时出现以下错误
- spring-boot - Spring Security OAuth + Spring Boot 2
- json - ReactJS:如何解决映射多个对象数组
- docker - Volume mount one file or directory straight from Container A to Container B
- android - 构建发布 apk 时发现意外的元数据类型
- android - viewmodel 在活动之间共享数据
- arrays - 如何将文档推送到一个字段唯一的 MongoDB 文档集?
- java - PayPal PDT 返回 HTTP 状态 307
- axis2 - Rampart:在不使用 CallbackHandler 的情况下定义密码