Simlar to checkTvEps, but verifies films are in the format "The Film Name [2005].avi"

This commit is contained in:
dbr
2008-06-02 11:39:54 +09:30
parent 7973abcadf
commit 6460378f46

166
checkFilms.py Executable file
View File

@@ -0,0 +1,166 @@
#!/usr/bin/env python
#encoding:utf-8
import os,re,sys
def colour(text,colour="red"):
nocolour=False
if nocolour: # Colour no supported, return plain text
return text
#end if
c = {'red':'[31m',
'green':'[32m',
'blue':'[34m',
}
CLR=chr(27)+'[0m'
if not colour in c.keys():
raise ValueError("Invalid colour")
else:
return chr(27)+c[colour] + text + CLR
#end if
#end colour
def getError(invalid,errorno):
"""Gets all invalid files with supplied error number"""
ret = []
for cur in invalid:
if cur['errorno'] == errorno:
ret.append(cur)
return ret
#end searchError
###################################
# Name regexs
###################################
# Valid filenames, with episode name
# Should return 2 groups:
# Film name.
# Year.
#
# Ignore filetype extension
#
# The Film [2004]
r_with_year = [
re.compile("([-\w\d ]+) \[(\d{4})\]"),
]
###################################
# Valid filenames, but missing year
#
# The Film
r_missing_year = [
re.compile("([-\w\d ]+)"),
]
# Valid path names
r_valid_path = [
re.compile("/.$"),
]
###################################
# Regex to match valid, but not-to-be-processed files (dot-files, folder.jpg artwork)
###################################
decrappify = [
re.compile("(?=^[.]{1}.*)"),
re.compile("folder.jpg"),
]
# Location to process
loc = "." # Runs from the current path
###################################
# Find all valid files
###################################
allfiles=[]
for (path,dirs,files) in os.walk(loc):
for file in files:
filename = os.path.join(path,file)
allfiles.append( str(filename) )
#end for f
files = [x for x in allfiles if os.path.isfile(x)] # only get files, not folders
# Strip out dotfiles/folder.jpg
for current_file in allfiles:
current_file_path,current_file_name = os.path.split(current_file)
for cur_decrap in decrappify:
if cur_decrap.match(current_file_name):
files.remove(current_file)
#end for file
files = [os.path.join(loc,x) for x in files] # append path to file name
# Warn if no files are found, then exit
if files.__len__() == 0:
print colour('No files found','red')
sys.exit(0)
errors = {
1:'malformed name',
2:'missing year',
3:'path is incorrect'
}
###################################
# Validate filenames
###################################
valid = []
invalid = []
for cur in files:
cpath,cfile = os.path.split(cur)
cfile,cext = os.path.splitext(cfile)
for cur_checker in r_valid_path:
# Check if path is valid
check = cur_checker.findall(cpath)
if check:
break
else:
invalid.append({'errorno':3, 'path':cpath,'filename':cfile,
'cext':cext})
#end for cur_checker
for cur_checker in r_with_year:
# Check if filename is valid (with ep name)
check = cur_checker.findall(cfile)
if check:
# Valid file name
valid.append({'path':cpath,'filename':cfile,
'cext':cext})
break # Found valid episode, skip to the next one
#end if
else:
for cur_checker in r_missing_year:
# Check for valid name with missing episode name
check = cur_checker.findall(cfile)
if check:
invalid.append({'errorno':2, 'path':cpath,'filename':cfile,
'cext':cext})
break
#end if check
else:
# Doesn't match valid-name or missing-ep-name regexs, it's invalid
invalid.append({'errorno':1, 'path':cpath,'filename':cfile,
'cext':cext})
#end for cur_checker
#end for cur_checker
#end for
###################################
# Show invalid names
###################################
for errorno,errordescr in errors.items():
errors = getError(invalid,errorno)
if len(errors) == 0: continue
errmsg = "# %s (error code: %s)" % (errordescr,errorno)
print
print "#"*len(errmsg)
print errmsg
print "#"*len(errmsg)
for c in errors:
print c['filename']