如何用 Python 批量修改文件名?
Updated
•1 min read
看电视剧时,字幕和视频的文件名不一致, emby 无法自动匹配字幕。出现这种情况,我在一般 Windows 系统中用 Total Commander 批量修改文件名,今天手头没有 Windows 电脑,平时没在 macOS 上找类似软件,就想着如何利用 Python 来批量修改。
视频的文件名类似 "the.leftovers.s01e10.1080p.bluray.x264-shortbrehd.mkv",准备修改为 "S01E10.mkv"。面向搜索编程,在 stackoverflow 上找到如下答复:
import re
regex = re.compile(r'^IMG_(\d{4})(\d{2})(\d{2})_(\d{2})(\d{2})(\d{2})\.jpeg$')
oldStr = 'IMG_20190401_235959.jpeg';
match = regex.match(oldStr)
newStr = '{}-{}-{}_{}_{}.jpg'.format(*match.groups())
print(newStr) # 2019-04-01_23_59.jpg
再利用 Python 的正则表达式和 pathlib 来处理文件,pathlib 提供了 Path.rename() 方法,利用这些武器,顺利改名:
from pathlib import Path
import re
# Assume that the current directory includes the files to be renamed
# One of the file names: "the.leftovers.s01e10.1080p.bluray.x264-shortbrehd.mkv"
# file name after rename: "S01E10.mkv"
p = Path('.')
for i in p.glob('*.mkv'):
i.rename(Path('S{}E{}'.format(*re.search('s(\d\d)e(\d\d)', i.stem).groups())+i.suffix))
最后,在上述过程中,需要注意「命令行通配符」,英文是 globbing patterns,字符串以通配符的形式作为上面代码中 p.glob() 方法的参数,此处可以参考阮一峰博客的命令行通配符教程。
