]> gitweb.pimeys.fr Git - scripts-20-100.git/blobdiff - rename_series.py
dos2unix à installer always
[scripts-20-100.git] / rename_series.py
index dd4e0fe773056bf80709a63700df545007cca989..60e6d5e94abe58e940e65be8f78083208b7ffb2e 100755 (executable)
@@ -12,16 +12,24 @@ import pprint
 
 FORMAT = "%%(series_name)s - [%%(season)0%(logmaxseason)sdx%%(episode)0%(logmaxepisode)sd] - %%(title)s.%%(extension)s"
 
-SEASONEPISODE_REGEXP = ur"^(?P<series_name>([A-Za-z0-9_-]+(\.| ))+)(S|\[)(?P<season>\d+)(E|x)(?P<episode>\d+).*\.(?P<extension>[a-z0-9]*)$"
+SEASONEPISODE_REGEXP = ur"^(?P<series_name>([A-Za-z0-9_()-]+(\.| ))+)(S|- \[?)(?P<season>\d+)(E|x)(?P<episode>\d+).*\.(?P<extension>[a-z0-9]*)$"
 sep_re = re.compile(SEASONEPISODE_REGEXP)
 
+def _tryint(s):
+    """Renvoie int(s) ou s si échec."""
+    try:
+        return int(s)
+    except:
+        return s
+
 def get_titles(filename, debug=False, oneintwo=False):
     """Récupère les titres des épisodes dans le fichier"""
     text = open(filename).read()
     if oneintwo:
         # On enlève une ligne sur deux
         text = re.sub("(.*\n).*\n", r'\1', text)
-    titles = re.findall('"(.*)"', text)
+    titles = re.findall('^([0-9\s]+)"(.*?)"', text, flags=re.MULTILINE)
+    titles = {_tryint(n) : title for (n, title) in titles}
     if debug:
         print "Titres :"
         pprint.pprint(titles)
@@ -67,11 +75,11 @@ def process(dir, titles, maxseason, seriesname, args):
         series_name = raw_input("Spécifier titre : ")
     else:
         series_name = list(series_names)[0]
-    l = range(1, len(dir) + 1)
+    l = range(args.starting, args.starting + len(dir))
     eps = dir.keys()
     eps.sort()
     if eps != l:
-        raise ValueError("Il manque des épisodes : %s" % eps)
+        raise ValueError("N° titres ≠ N° épisodes : %s ≠ %s" % (l, eps))
     if len(titles) != len(eps):
         print "Pas autant de titres que d'épisodes : on retente en lisant une ligne sur deux."
         titles = get_titles(args.titles, oneintwo=True)
@@ -86,7 +94,7 @@ def process(dir, titles, maxseason, seriesname, args):
     for k in eps:
         (before, d) = dir[k]
         d.update(formatdir)
-        d["title"] = titles[k-1]
+        d["title"] = titles[k]
         newname = FORMAT % d
         newname = newname % d
         map.append((before, newname))
@@ -113,6 +121,7 @@ if __name__ == "__main__":
     parser.add_argument('-t', '--titles', help="Fichier contenant les titres des épisodes", action="store", type=str, default="titles")
     parser.add_argument('-m', '--maxseason', help="Nombre total de saisons (pour le nombre de 0)", action="store", type=str, default=1)
     parser.add_argument('-s', '--seriesname', help="Override le nom de la série", action="store", type=str)
+    parser.add_argument('-n', '--starting', help="Numéro du 1er épisode", action="store", type=int, default=1)
     
     args = parser.parse_args()