Python에서 일괄 이름 바꾸기 스크립트를 만드시겠습니까?

Python에서 일괄 이름 바꾸기 스크립트를 만드시겠습니까?

첫째, 이 질문은 이전 질문에 대한 후속 질문으로 만들어졌습니다."변수"를 사용하여 파일 이름을 일괄적으로 바꾸는 방법은 무엇입니까?. Sergey의 추천을 고려하여 다시 설명하겠습니다.

나는 xmbc를 사용하여 TV 프로그램을 봅니다. xmbc를 사용하기 전에는 "Bleach"의 처음 몇 시즌을 일괄 다운로드했습니다. 무슨 말을 해야 할까요, 저는 애니메이션 팬입니다 ;-). 이름은 "bleachxx.mp4"입니다. 여기서 xx는 시즌이 아닌 전체 시리즈에 대한 에피소드 번호입니다. 따라서 "bleach21.mp4"는 시즌 2의 첫 번째 에피소드이자 전체 21번째 에피소드입니다. 그러나 파일 자체는 자체 시즌 폴더로 구분됩니다.

문제는 명령이 모든 파일의 이름을 "Bleach S0XExx"로 바꾸지만 파일에 전체 파일 번호가 있기 때문에 시즌 3에 52개의 에피소드가 분명히 없을 때 블리치52.mp4 --> 'Bleach S03E52.mp4'라는 것입니다.

이 문제를 해결하려면 이전 시즌의 에피소드 수에서 전체 에피소드 수를 빼서 본질적으로 특정 시즌 번호를 얻어야 합니다.

예: 시즌 1에 20개의 에피소드가 있는 경우 25-20=5이므로 25번째 에피소드는 시즌 2의 5번째 에피소드이며 이름 변경은 정상적으로 수행됩니다.

저는 코딩에 있어서 완전한 초보자입니다. 저는 이것이 이 문제를 해결하는 효과적인 방법이라고 들었기 때문에 방금 Python 스크립트를 제안했습니다. 누군가 이 스크립트를 작성하는 단계별 과정을 도와줄 수 있습니까? 감사해요!

답변1

이것은 머리 꼭대기에서 벗어 났지만 다음을 시도하십시오.

# call program as: epirename.py /path/to/mp4files 20 41 59
# the numbers are the sequence of first episodes in each season after the first
import os
import re
import sys
mp4dir = sys.argv[1]
seasons = [int(startnum) for startnum in sys.argv[2:]]
seasons.insert(0, 0) # start with '0' as the first episode of season 1
season = 0
patt = re.compile(r'([[:alpha:]]+)([[:digit:]]+).mp4')
for filename in sorted(os.listdir(mp4dir)):
    match = patt.search(filename)
    if match:
        episode = int(match.group(2))
        try:
            if episode >= seasons[season+1]:
                season += 1
        except:
            pass
        # create new filename as '{basename}S{season}E{episode}'
        newname = '%sS%02dE%03d.mp4' % (match.group(1), season+1, episode - seasons[season])
        os.rename(os.path.join(dir, filename),
                  os.path.join(dir, newname))
        print 'renamed', filename 'to', newname

결과적으로 '{name}{epi}.mp4'와 일치하는 파일의 이름은 '{name}S{season}E{episode}.mp4'로 변경됩니다. 다른 파일은 그대로 유지됩니다.

다시 말하지만, 이것은 내 머리 꼭대기에서 벗어났습니다. 더 효율적인 기술이 있을 수 있습니다.

관련 정보