Outils pour utilisateurs

Outils du site


issue77:tutoriel_-_python_47

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
issue77:tutoriel_-_python_47 [2014/02/24 13:47] – [8] fredphil91issue77:tutoriel_-_python_47 [2014/03/07 12:13] (Version actuelle) – [8] fredphil91
Ligne 49: Ligne 49:
 In the line above right, we call the GetSeasonEpisode routine to pull the series name, season number and episode number from the filename. If everything parses correctly, the variable isok is set to true, and the data we are looking for is placed into a list and then returned to us.** In the line above right, we call the GetSeasonEpisode routine to pull the series name, season number and episode number from the filename. If everything parses correctly, the variable isok is set to true, and the data we are looking for is placed into a list and then returned to us.**
  
-Jetons un coup d'oeil rapide et rafraîchissons notre mémoire (ci-dessus) sur ce que nous faisons dans la routine existante avant de la modifier.+Jetons un coup d’œil rapide et rafraîchissons notre mémoire (ci-dessus) sur ce que nous faisons dans la routine existante avant de la modifier.
  
-Les deux premières lignes ici initialisent les choses pour la routine ParcourirChemin, dans laquelle nous commençons dans un dossier donné dans le système de fichiers et visitons de manière récursive chaque dossier en-dessouset vérifions les fichiers qui ont l'extension .avi, .mkv, .mp4 ou .m4v. S'il y en a, nous parcourons ensuite la liste de ces noms de fichiers.+Les deux premières lignes ici initialisent les choses pour la routine ParcourirChemin, dans laquelle nous commençons dans un dossier donné dans le système de fichiers et visitons de manière récursive chaque dossier en-dessous et vérifions l'existence des fichiers qui ont l'extension .avi, .mkv, .mp4 ou .m4v. S'il y en a, nous parcourons ensuite la liste de ces noms de fichiers.
  
 Dans la ligne en haut à droite, nous appelons la routine RecupereSaisonEpisode pour récupérer le nom de la série et les numéros de la saison et de l'épisode à partir du nom de fichier. Si tout est analysé correctement, la variable estok est réglée à vrai (true) et les données que nous cherchons sont placées dans une liste qui nous est retournée. Dans la ligne en haut à droite, nous appelons la routine RecupereSaisonEpisode pour récupérer le nom de la série et les numéros de la saison et de l'épisode à partir du nom de fichier. Si tout est analysé correctement, la variable estok est réglée à vrai (true) et les données que nous cherchons sont placées dans une liste qui nous est retournée.
Ligne 60: Ligne 60:
 We want to get the episode number of each file and put it into the elist list. Once we are done with all the files within the folder we are currently in, we can then make the assumption that we have been pretty much keeping up with the files and the highest numbered episode is the latest one available. As we discussed last month, we can then create a set that is numbered from 1 to the last episode, and convert the list to a set and pull a difference. While that is great in theory, there is a bit of a “hitch in our git-a-long” when it comes down to actual practice. We don’t actually get a nice and neat indication as to when we are done with any particular folder. What we do have though, is the knowledge that when we get done with each file, the code right after the “for file in [...” gets run. If we know the name of the last folder visited, and the current folder name, we can compare the two and, if they are different, we have finished a folder and our episode list should be complete. That’s what the ‘lastroot’ variable is for.** We want to get the episode number of each file and put it into the elist list. Once we are done with all the files within the folder we are currently in, we can then make the assumption that we have been pretty much keeping up with the files and the highest numbered episode is the latest one available. As we discussed last month, we can then create a set that is numbered from 1 to the last episode, and convert the list to a set and pull a difference. While that is great in theory, there is a bit of a “hitch in our git-a-long” when it comes down to actual practice. We don’t actually get a nice and neat indication as to when we are done with any particular folder. What we do have though, is the knowledge that when we get done with each file, the code right after the “for file in [...” gets run. If we know the name of the last folder visited, and the current folder name, we can compare the two and, if they are different, we have finished a folder and our episode list should be complete. That’s what the ‘lastroot’ variable is for.**
  
-Ensuite (ci-dessous), nous affectons simplement les données retournées par RecupereSaisonEpisode et les mettons dans des variables distinctes avec lesquelles nous pourrons jouer. Maintenant que nous savons où nous en sommes, parlons de là où nous voulons aller.+Ensuite (ci-dessous), nous affectons simplement les données retournées par RecupereSaisonEpisode et les mettons dans des variables distinctes avec lesquelles nous pourrons jouer. Maintenant que nous savons où nous en sommes, parlons de ce qui va se passer.
  
-Nous voulons obtenir le numéro d'épisode pour chaque fichier et le placer dans la liste ep_liste. Une fois que nous avons terminé avec tous les fichiers du dossier dans lequel nous sommes, nous pouvons faire l'hypothèse que nous avons à peu près traité correctement les fichiers et que le numéro d'épisode le plus élevé est le plus récent disponible. Comme nous l'avons vu le mois dernier, nous pouvons alors créer un ensemble contenant les nombres de 1 au dernier épisode, convertir la liste en ensemble et calculer la différence. C'est très bien en théorie, mais il y a un petit grain de sable dans notre mécanique quand on la met en pratique. Nous n'avons pas vraiment d'indication claire et nette quand nous avons fini avec un dossier particulier. Ce que nous savons cependant, c'est que lorsque nous aurons fini avec chaque fichier, le code juste après « for fic in [... » est exécuté. Si nous connaissons le nom du dernier dossier visité et le nom du dossier en cours, nous pouvons comparer les deux et s'ils sont différents c'est que nous venons de terminer un dossier et que notre liste d'épisodes devrait être complète. C'est pour cela que la variable « derniere_racine » est là.+Nous voulons obtenir le numéro d'épisode pour chaque fichier et le placer dans la liste ep_liste. Une fois que nous avons terminé avec tous les fichiers du dossier dans lequel nous sommes, nous pouvons faire l'hypothèse que nous avons à peu près correctement traité les fichiers et que le numéro d'épisode le plus élevé est le plus récent disponible. Comme nous l'avons vu le mois dernier, nous pouvons alors créer un ensemble contenant les numéros de 1 au dernier épisode, convertir la liste en ensemble et calculer la différence. C'est très bien en théorie, mais il y a un petit grain de sable dans notre mécanique quand on la met en pratique. Nous n'avons pas vraiment d'indication claire et nette quand nous avons fini avec un dossier particulier. Ce que nous savons cependant, c'est quelorsque nous aurons fini avec chaque fichier, le code juste après « for fic in [... » est exécuté. Si nous connaissons le nom du dernier dossier visité et le nom du dossier en cours, nous pouvons comparer les deux et s'ils sont différentsc'est que nous venons de terminer un dossier et que notre liste d'épisodes devrait être complète. C'est pour cela que la variable « derniere_racine » est là.
  
 ====== 5 ====== ====== 5 ======
Ligne 75: Ligne 75:
 Voici la logique du nouveau code, ligne par ligne : Voici la logique du nouveau code, ligne par ligne :
  
-Tout d'abord, nous vérifions si la variable derniere_racine a la même valeur que racine (le nom du dossier en cours). Si c'est le cas, nous sommes dans le même dossieret nous n'exécutons pas le code. Sinon, nous attribuons le nom de dossier actuel à la variable derniere_racine. Ensuite, nous vérifions si la liste des épisodes (ep_liste) a des entrées (len(ep_liste)> 0). C'est pour s'assurer que nous n'étions pas dans un répertoire vide. Si nous avons des éléments dans la liste, alors nous appelons la routine Manquant. Nous lui passons la liste des épisodes, le numéro de l'épisode le plus élevé, le numéro de la saison en cours, et le nom de la saison, pour pouvoir les afficher plus tard. Les trois dernières lignes effacent la liste, le nom de l'émission en cours, et la saison en cours, et nous continuons comme nous le faisions avant.+Tout d'abord, nous vérifions si la variable derniere_racine a la même valeur que racine (le nom du dossier en cours). Si c'est le cas, nous sommes dans le même dossier et nous n'exécutons pas le code. Sinon, nous attribuons le nom de dossier actuel à la variable derniere_racine. Ensuite, nous vérifions si la liste des épisodes (ep_liste) a des entrées (len(ep_liste)> 0). C'est pour s'assurer que nous ne sommes pas dans un répertoire vide. Si nous avons des éléments dans la liste, alors nous appelons la routine Manquant. Nous lui passons la liste des épisodes, le numéro de l'épisode le plus élevé, le numéro de la saison en cours, et le nom de la saison, pour pouvoir les afficher plus tard. Les trois dernières lignes effacent la liste, le nom de l'émission en cours, et la saison en cours, et nous continuons comme nous le faisions avant.
  
 ====== 6 ====== ====== 6 ======
Ligne 99: Ligne 99:
 Encore une fois, c'est du code très simple et nous l'avons quasiment déjà vu le mois dernier, mais nous allons le parcourir juste au cas où vous l'auriez manqué. Encore une fois, c'est du code très simple et nous l'avons quasiment déjà vu le mois dernier, mais nous allons le parcourir juste au cas où vous l'auriez manqué.
  
-Nous définissons la fonction et mettons en place quatre paramètres. Nous passerons la liste des épisodes (episode_liste), le nombre d'épisodes que nous devrions avoir (devrait) qui est le numéro d'épisode le plus élevé dans la liste des épisodes, le numéro de la saison (saison), et le nom de l'émission (nom_emission).+Nous définissons la fonction et mettons en place quatre paramètres. Nous passerons la liste des épisodes (episode_liste), le nombre d'épisodes que nous devrions avoir (nombre_therorique) qui est le numéro d'épisode le plus élevé dans la liste des épisodes, le numéro de la saison (saison), et le nom de l'émission (nom_emission).
  
-Ensuite, nous créons un ensemble qui contient une liste de numéros en utilisant la fonction intégrée « range », en allant de 1 à la valeur devrait + 1. Nous appelons ensuite la fonction de différence - sur cet ensemble et un ensemble converti depuis la liste des épisodes (temp - set(episode_liste)) - et le reconvertissons en liste. Nous vérifions ensuite s'il y a quelque chose dans la liste - afin de ne pas afficher une ligne avec une liste vide, et s'il y a quelque chose, nous l'affichons.+Ensuite, nous créons un ensemble qui contient une liste de numéros en utilisant la fonction intégrée « range », en allant de 1 à la valeur nombre_therorique + 1. Nous appelons ensuite la fonction de différence - sur cet ensemble et un ensemble converti depuis la liste des épisodes (temp - set(episode_liste)) - et le reconvertissons en liste. Nous vérifions ensuite s'il y a quelque chose dans la liste - afin de ne pas afficher une ligne avec une liste vide, et s'il y a quelque chose, nous l'affichons.
  
 ====== 8 ====== ====== 8 ======
Ligne 112: Ligne 112:
 C'est tout. La seule faille dans cette logique est qu'avec cette façon de faire, nous ne savons pas s'il y a de nouveaux épisodes que nous n'avons pas. C'est tout. La seule faille dans cette logique est qu'avec cette façon de faire, nous ne savons pas s'il y a de nouveaux épisodes que nous n'avons pas.
  
-J'ai mis les deux routines sur pastebin pour si vous voulez juste faire un remplacement rapide dans votre code. Vous pouvez les consulter ici : http://pastebin.com/q8Re6bLd.+J'ai mis les deux routines sur pastebin au cas où vous voudriez juste faire un remplacement rapide dans votre code. Vous pouvez les consulter ici : http://pastebin.com/CnHK8xxf.
  
 Passez un bon mois et nous vous reverrons bientôt. Passez un bon mois et nous vous reverrons bientôt.
 +
 +====== Morceaux de code dans les encadrés ======
 +
 +==== page 7 en haut ====
 +
 +    for racine, reps, fichiers in os.walk(chemin,topdown=True):
 +        for fic in [f for f in fichiers if f.endswith (('.avi','mkv','mp4','m4v'))]:
 +
 +==== page 7 juste en dessous ====
 +
 +    # Combine chemin et nom de fichier pour creer une seule variable
 +    fn = join(racine,fic)  
 +    NomFicOriginal,ext = os.path.splitext(fic)
 +    fl = fic
 +    estok,donnees = RecupereSaisonEpisode(fl)
 +
 +==== page 7 en bas ====
 +
 +    if estok:
 +        nomEmission = data[0]
 +        saison = data[1]
 +        episode = data[2]
 +        print("Saison {0} Episode {1}".format(saison,episode)
 +
 +==== page 8 en haut ====
 +
 +    for fic in [f for f in fichiers if f.endswith (('.avi','mkv','mp4','m4v'))]:
 +        # Combine chemin et nom de fichier pour creer une seule variable
 +        if derniere_racine != racine:
 +            derniere_racine = racine
 +            if len(ep_liste) > 0:
 +                Manquants(ep_liste,max(ep_liste),saison_courante,emission_courante)
 +            ep_liste = []
 +            emission_courante = ''
 +            saison_courante = ''
 +        fn = join(racine,fic)  
 +
 +==== page 8 juste en dessous ====
 +
 +    estok,donnees = RecupereSaisonEpisode(fl)
 +    if estok:
 +        emission_courante = nomEmission = data[0]
 +        saison_courante = saison = data[1]
 +        episode = data[2]
 +        ep_liste.append(int(episode))
 +    else:
 +
 +==== page 8 en bas ====
 +
 +    #----------------------------------
 +    def Manquants(episode_liste,nombre_theorique,saison,nom_emission):
 +        temp = set(range(1,nombre_theorique+1))
 +        ret = list(temp-set(episode_liste))
 +        if len(ret) > 0:
 +            print('Episodes manquants pour {0} saison {1} - {2}'.format(nom_emission,saison,ret))
 +
  
issue77/tutoriel_-_python_47.1393246031.txt.gz · Dernière modification : 2014/02/24 13:47 de fredphil91