Я потратил несколько часов на написание и настройку скрипта Python, чтобы сделать именно это. Одна из вещей, которые я обнаружил, заключается в том, что довольно часто он не такой черно-белый, как обработка одного файла, подобного этому.
Примечание: это основано на Python, что потребует настройки, если вы работаете на другом языке
Почему я говорю вам это:
- Иногда файл имеет плохое имя, а родительская папка называется так, как вы указали.
- Иногда вы получите статьи или римские цифры в середине, которые должны / не должны быть заглавными
- Вы можете переместить "The" в конец, как в «, The»
- Иногда дата отсутствует
- В вашем конкретном примере вашему регулярному выражению будет нелегко провести различие между 2001 и 1968 годами.
В конце концов, вы можете обнаружить, что разбиение вашей функции на несколько частей (или использование соответствия) поможет вам разделить ее на части.
Вот основное резюме того, что я в конечном итоге использовал:
1: Установите некоторые глобальные переменные, чтобы обеспечить гибкость:
renamePattern = "%titlethe% %quality% (%year%).%ext%"
articles = ['a', 'an', 'of', 'the', 'is', 'on', 'at', 'in', 'and']
roman = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII', 'XIII']
2: Проверьте, имеет ли файл правильное имя, в противном случае поднимитесь и проверьте папку:
if (re.search(".+(108|72)0p?.+", folder) and re.search(".+(\s|\.)(19|20)[0-9][0-9](.*|(?!p))", folder)):
#appears to have a valid quality and date, return folder
elif (re.search(".+(108|72)0p?.+", file) and re.search(".+(\s|\.)(19|20)[0-9][0-9](.*|(?!p))", file)):
#appears to have a valid date and quality, return file
else:
#return None, which will fail the script
3: сделать немного магии
f = re.sub("\.", " ", file_string)
s = re.sub("\.", "", s)
if re.search("\%\w+\%", s):
if re.search("titlethe", s):
s = titleCase(f, articles)
s = re.sub("\s(19|20)[0-9][0-9](.*|(?!p))$", "", s)
s = re.sub("\s?(108|72)0p\s?", "", s, re.I)
if re.search("^The\s", s):
s = re.sub("^The\s", "", s) + ", The"
elif re.search("thetitle", s):
#do thetitle stuff
s = titleCase(f, articles)
s = re.sub("\s(19|20)[0-9][0-9](.*|(?!p))$", "", s)
s = re.sub("\s?(108|720)p\s?", " ", s, re.I)
elif re.search("quality", s):
if re.search(".*1080p?.*", f, re.I):
s = "1080p"
elif re.search(".*720p?.*", f, re.I):
s = "720p"
elif re.search("year", s):
p = re.compile(".+\s(?P<year>(19|20)[0-9][0-9])(.*|(?!p))")
if p is not None:
m = p.match(f)
s = m.group('year')
elif re.search("ext", s):
s = getExt(file_name)
return re.sub("[ ]{2,}", " ", s)
Изменить: В конце концов, если вы на самом деле просто хотите сценарий Python, который я написал, дайте мне знать, и я опубликую его на sourceforge или git.