BigG

Membres
  • Content count

    2
  • Joined

  • Last visited


Community Reputation

0 Neutre

About BigG

  • Rank
    Petit nouveau

BigG's Activity

  1. BigG added a post in a topic: [Python] Petit script pour renommer les series   



    Niquel la commande os.sep marche super bien merci pour l'info par contre pour ce qui est de config parser je vois pas bien où tu veux en venir car si on doit créer autant de fichier ini ça revient au même. Pour tout mettre dans un seul c'est moins pratique pour que les gens le rajoute eux-même. Enfin, si tu savais être un rien plus clair car je ne vois pas ce que ça apporterai.
    Sinon c'est pas mon tout 1er, mais c'est le 1er un peu conséquent (+de 20 lignes ).



    S'il ne trouve pas les 4 éléments suivant : nom de la série, saison, épisode et titre. Il ne renommera pas ton fichier. Mais tu peux rajouter la détection du nom de la série en suivant la procédure décrite dans mon 1er post.
    • 0
  2. BigG added a post in a topic: [Python] Petit script pour renommer les series   

    Salut à tous, ça fait quelques mois que je suis le blog et le forum de Korben et j'ai décidé d'apporter ma contribution.

    J'ai réaliser un petit script qui renomme les series en fonction du site IMDB.
    Par exemple "weeds.101.lol.avi" sera renommer en "Weeds S01E01 - You Can't Miss the Bear.avi".
    Cela fonctionne aussi pour les fichier du type "weeds_1x01_lol.avi" et "weeds s01e01_lol.avi".

    Bon ce sont mes débuts en Python donc soyez indulgent ^^


    #!/usr/bin/python # -*- coding: utf-8 -*- import re import os import urllib, urllib2 from htmlentitydefs import name2codepoint as n2cp infoPath = "series" ext = [&#39;avi&#39;, &#39;mkv&#39;, &#39;ass&#39;, &#39;ssa&#39;, &#39;srt&#39;] path = raw_input(&#39;Choisir le dossier à traiter :\n&#39;) progPath = os.getcwd() os.chdir(path) def testOS(path): if path.split("/")[0] == &#39;&#39;: os = "Linux" else: os = "Windows" return os if testOS(os.getcwd()) == "Linux": infoPath = progPath + "/" + infoPath + "/" else: infoPath = progPath + "\\" + infoPath + "\\" def CarNonAuth(chaine): chaine = str(chaine) chaine = chaine.replace("\"", "&#39;&#39;") chaine = chaine.replace("\\", "-") chaine = chaine.replace("/", "-") chaine = chaine.replace("*", "") chaine = chaine.replace("?", "") chaine = chaine.replace("<", "(") chaine = chaine.replace(">", ")") chaine = chaine.replace("|", "") chaine = chaine.replace(":", "") return chaine def substitute_entity(match): ent = match.group(3) if match.group(1) == "#": if match.group(2) == &#39;&#39;: return unichr(int(ent)) elif match.group(2) == &#39;x&#39;: return unichr(int(&#39;0x&#39;+ent, 16)) else: cp = n2cp.get(ent) if cp: return unichr(cp) else: return match.group() def decode_htmlentities(string): entity_re = re.compile(r&#39;&(#?)(x?)(\d{1,5}|\w{1,8});&#39;) return entity_re.subn(substitute_entity, string)[0] def testTable(i, liste): k = 0 for j in liste: if j == i.split(&#39;.&#39;)[-1]: k = 1 return k def findSerie(fichier): for fichierInfo in os.listdir(infoPath): #on cherche dans les fichier if fichierInfo.split(".")[-1] == "txt": #seulement .txt nom = fichierInfo.split(".")[0] info = open(infoPath + fichierInfo, "r") #lecture du fichier #print info.read().strip() #strip enleve les blanc devant et derriere i, j = 0, -1 #-1 car il y le 1er argument pour les infos for key in info.read().split("\n"): #on test le contenu de chaque fichier key = key.strip().replace("/", "") if j == -1: #on isole le 1er pour la ref imdb imdbRef = key a = re.findall(key.strip(), fichier, re.I) #print a, key if len(a) != 0: #si on trouve un resultat i += 1 j += 1 info.close() match = (i*1.0)/j #print match if match >= 0.6: #si le % de mot trouvé est >= 60% #print "Correspondace :", i, j, match #apliquer ici le reste genre table de renomage ... return nom, imdbRef break return None, None def findSE(fichier): res = re.search("s([0-9]{1,2})e([0-9]{1,2})", fichier, re.I) #on recherche s00e00 (re.I : ignore la casse) if res != None: #on test si le tableau n&#39;est pas vide return res.group(1), res.group(2) res = re.search("([0-9]{1,2})x([0-9]{1,2})", fichier, re.I) #on recherche 00x00 if res != None: #on test si le tableau n&#39;est pas vide return res.group(1), res.group(2) res = re.search("[\._ ]([0-9]{1})([0-9]{1,2})[\._ ]", fichier, re.I) #on recherche 000 if res != None: #on test si le tableau n&#39;est pas vide return res.group(1), res.group(2) return 0, 0 def imdb(ref, saison, episode): request = urllib2.Request(&#39;http://www.imdb.com/title/&#39; + str(ref) + &#39;/episodes&#39;) opener = urllib2.build_opener() request.add_header(&#39;User-Agent&#39;, &#39;Mozilla/5.0 (X11; U; Linux x86_64; fr; rv:1.9.2.8) Gecko/20100723 Ubuntu/10.04 (lucid) Firefox/3.6.8&#39;) feeddata = opener.open(request).read() res = re.search(&#39;Season &#39; + str(saison) + &#39;, Episode &#39; + str(episode) + &#39;: <a href=.*?>(.*?)</a>&#39;, feeddata) if res != None: #on test si le tableau n&#39;est pas vide return decode_htmlentities(res.group(1)) return None liste = [] for fichier in os.listdir(path): #on test les fichier if testTable(fichier, ext) == 1: #seulement media authorisé dans ext print "Analyse de :", fichier, "en cours..." nom, imdbRef = findSerie(fichier) #on recup le nom et la ref imdb if nom != None: s, e = findSE(fichier) #on recheche la saison et l&#39;episode s, e = int(s), int(e) titre = imdb(imdbRef, s, e) if titre != None: #si on a le titre, le nom, la saison et l&#39;espidode on renome if s/10 == 0: #transforme en 1 en 01, ... s = "0" + str(s) if e/10 == 0: e = "0" + str(e) nom = CarNonAuth(nom) #on retire les caracteres non auth par windows titre = CarNonAuth(titre) liste.append([nom + " S" + str(s) + "E" + str(e) + " - " + titre + "." + fichier.split(&#39;.&#39;)[-1], fichier]) print for item in liste: print item[0], item[1] a = raw_input(&#39;Voulez-vous opérer ces changements ?\n&#39;) if a == &#39;oui&#39;: for item in liste: os.rename(item[1], str(item[0])) #renome print "Ok" print a = raw_input(&#39;Anuler les modif ?\n&#39;) if a == &#39;oui&#39;: for item in liste: os.rename(item[0], item[1]) #renome print "Ok" Pour détecter une nouvelle série, il suffit de créer un fichier texte dans le dossier series placer dans le même répertoire que le script avec la référence imdb (http://www.imdb.com/title/tt0439100/) en 1ère ligne et les ligne suivantes sont les mots clef à rechercher. Par exemple pour The IT Crowd : series.tar The IT Crowd.txt tt0487831 crowd the it

    Attention: le nom du fichier est important car c'est lui qui sera utilisé pour le nom de la serie.

    Il me reste 2 ou 3 trucs à améliorer notamment la gestion des erreurs mais c'est pour plus tard, pareil pour une intégration à Nautilus.

    Ce script à été testé sous Ubuntu 10.04 et Windows XP.

    J'attends vos retours car mon but est de m'amélioré en Python ^^.
    • 0

Status Feed