我正在尝试使用 python 重命名具有此命名约定的 windows 目录中的 1000 多个文件:
The.Woman.In.Black.2012.720p.BluRay.x264
所需的命名约定是: The Woman In Black {2012}
我需要原始名称中唯一重要的东西是标题和日期....
我尝试过使用不同的字符串操作变体,但我一无所获。我需要帮助开始。
我知道我应该使用 os 模块来重命名文件,但是我应该尝试使用什么程序来完成这项任务?
任何帮助将不胜感激。谢谢。
我正在尝试使用 python 重命名具有此命名约定的 windows 目录中的 1000 多个文件:
The.Woman.In.Black.2012.720p.BluRay.x264
所需的命名约定是: The Woman In Black {2012}
我需要原始名称中唯一重要的东西是标题和日期....
我尝试过使用不同的字符串操作变体,但我一无所获。我需要帮助开始。
我知道我应该使用 os 模块来重命名文件,但是我应该尝试使用什么程序来完成这项任务?
任何帮助将不胜感激。谢谢。
filename = 'The.Woman.In.Black.2012.720p.BluRay.x264'
# using regular expressions
import re
title, year = re.match('(.*?)\.(\d{4})\.720p\.BluRay\.x264', filename).groups()
# simpler regular expression, matching any format specifiers
title, year = re.match('(.+)\.(\d{4})\.', filename).groups()
# using simple string manipulation if the suffix is always the same
title, year = filename[:-22], filename[-21:-17]
# normalize title
title = title.replace('.', ' ')
# build new filename
print('%s {%s}' % (title, year)) # The Woman In Black {2012}
看起来您的标题的一般格式是:
name.name.name.name.name.date.resolution.format.codec
在这种情况下,我会这样做(未经测试):
import os
TARGET_DIR = r'/path/to/movies/'
for old_title in os.listdir(TARGET_DIR + '*'):
words = old_title.split('.')
date = words[-4]
name = ' '.join(words[:-4])
new_title = '%s {%s}' % (name, date)
old_title = os.path.join(TARGET_DIR, old_title)
new_title = os.path.join(TARGET_DIR, new_title)
os.rename(old_title, new_title)
如果原始命名约定是一致的,您可以在 '.' 上拆分原始文件名字符串。字符,然后查找有效年份,添加大括号,并将其与所有前面的标记连接起来以形成新名称。
有关如何使用 python 重命名文件的信息,请参阅此问题。
def change_filename(name):
filename = name.split('.')
wordlist = filename[:-4]
extension = '.' + filename[-1]
wordlist[-1] = '{' + wordlist[-1] + '}'
os.rename(name, ' '.join(wordlist) + extension)
这个函数应该做你想要的,你只需要给它提供名字。
注意:您可能希望在文件名上添加文件扩展名,否则它可能会变得很奇怪。
如果你在同一个文件上多次运行它,你会得到一个用大括号重载的文件,你不希望这样,所以这里有一个反转函数:
def filename_cleanup(name):
filename = name.replace('{', '').replace('}', '')
wordlist = filename.split(' ')
extension = '.' + wordlist.pop()
wordlist[-1] = '{' + wordlist[-1] + '}'
os.rename(name, ' '.join(wordlist) + extension)
那应该再次为您提供正确的文件名。