Skip to content

Instantly share code, notes, and snippets.

@FlandreDaisuki
Created May 13, 2016 18:08
Show Gist options
  • Save FlandreDaisuki/6593b5f764934bba5c47fef3c76bafd8 to your computer and use it in GitHub Desktop.
Save FlandreDaisuki/6593b5f764934bba5c47fef3c76bafd8 to your computer and use it in GitHub Desktop.
Make your animes orderly
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