Created
May 13, 2016 18:08
-
-
Save FlandreDaisuki/6593b5f764934bba5c47fef3c76bafd8 to your computer and use it in GitHub Desktop.
Make your animes orderly
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import re | |
from os import listdir, mkdir | |
from os.path import isfile, isdir, splitext | |
from shutil import move as mv | |
def move(src, dst): | |
_ = mv(src, dst) | |
def parseBrackets(fname): | |
name, ext = splitext(fname) | |
a = re.findall('[^\[\]]+', name) | |
retval = {} | |
retval['subgroup'] = a[0] | |
a.remove(a[0]) | |
retval['animename'] = a[0] | |
a.remove(a[0]) | |
langlist = [x.upper() for x in a] | |
if 'GB' in langlist: | |
retval['lang'] = 'GB' | |
a.remove('GB') | |
elif 'BIG5' in langlist: | |
retval['lang'] = 'BIG5' | |
a.remove('BIG5') | |
else: | |
retval['lang'] = None | |
reslist = [x for x in a if len(re.findall('\d{3,4}[pP]', x)) > 0] | |
if len(reslist) > 0: | |
retval['res'] = reslist[0] | |
a.remove(reslist[0]) | |
else : | |
retval['res'] = None | |
eplist = [x for x in a if len(re.findall('\d+', x)) > 0] | |
if len(eplist) > 0: | |
retval['ep'] = eplist[0] | |
a.remove(eplist[0]) | |
else : | |
retval['ep'] = None | |
retval['other'] = a | |
return retval | |
def getSubgroupName(fname): | |
return parseBrackets(fname)['subgroup'] | |
def getAnimeName(fname): | |
return parseBrackets(fname)['animename'] | |
def getAnimeEp(fname): | |
return parseBrackets(fname)['ep'] | |
def foldersAndMp4s(): | |
folders = [x for x in listdir() if isdir(x)] | |
mp4s = [x for x in listdir() if isfile(x) and splitext(x)[1] == '.mp4'] | |
return folders, mp4s | |
folders, mp4s = foldersAndMp4s() | |
while True: | |
# Existed folder animes | |
for folder in folders: | |
folderA = getAnimeName(folder) | |
for mp4 in mp4s: | |
if folderA in mp4: | |
move(mp4, folder) | |
ep = getAnimeEp(mp4) | |
print('mv [{}][{}] into its folder'.format(folderA, ep)) | |
folders, mp4s = foldersAndMp4s() | |
# Animes more than 1 episode should have folder | |
Animeset = {getAnimeName(mp4) for mp4 in mp4s} | |
if len(mp4s) == len(Animeset): | |
break | |
else: | |
for anime in Animeset: | |
more = [x for x in mp4s if anime in x] | |
if len(more) > 1: | |
more.sort() | |
dirname, _ = splitext(more[0]) | |
mkdir(dirname) | |
print('mkdir {}'.format(dirname)) | |
for m in more: | |
move(m, dirname) | |
ep = getAnimeEp(m) | |
name = getAnimeName(m) | |
print('mv [{}][{}] into its folder'.format(name, ep)) | |
folders, mp4s = foldersAndMp4s() | |
print('Done.') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment