Skip to main content

Command Palette

Search for a command to run...

如何用 Python 批量修改文件名?

Updated
1 min read
如何用 Python 批量修改文件名?

看电视剧时,字幕和视频的文件名不一致, 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() 方法的参数,此处可以参考阮一峰博客的命令行通配符教程

More from this blog