Comment vérifier un ensemble de fichiers de se conformer à un schéma de nommage

StackOverflow https://stackoverflow.com/questions/19030

  •  09-06-2019
  •  | 
  •  

Question

J'ai un tas de fichiers (épisodes de séries TV, même si c'est assez arbitraire) que je veux vérifier corresponde à une désignation d'organisation schéma..

Actuellement:J'ai trois tableaux de regex, l'un pour la validité des noms de fichiers, un pour les fichiers manquants à un épisode de nom, et une pour les chemins valides.

Ensuite, j'effectue une boucle pour chaque valides-nom de fichier regex, si elle correspond, l'ajouter à un "valide" dict, si non, faites de même avec la disparition du-ep-nom regexs, si elle correspond à ce que je l'ajouter à un "non valide" dict avec un code d'erreur (2: le "manque epsiode nom"), si elle correspond à aucun des deux, il est ajouté à la validité avec le "mal formé" nom de code d'erreur.

Le code actuel ne peut être trouvé ici

Je veux ajouter une règle qui vérifie la présence d'un folder.jpg de fichiers dans chaque répertoire, mais pour ajouter le code beaucoup plus compliqué dans son état actuel..

Comment pourrais-je écrire à ce système plus évolutif façon?

Les règles qu'il doit vérifier serait..

  • Le fichier est au format Show Name - [01x23] - Episode Name.avi ou Show Name - [01xSpecial02] - Special Name.avi ou Show Name - [01xExtra01] - Extra Name.avi
  • Si le nom de fichier est au format Show Name - [01x23].avi afficher un "manque d'épisode le nom de" section de la sortie
  • Le chemin doit être dans le format Show Name/season 2/the_file.avi (où la saison 2 devrait être la bonne saison, le nombre dans le nom de fichier)
  • chaque Show Name/season 1/ le dossier doit contenir "folder.jpg"

.des idées?Alors que je suis en train de vérifier les épisodes de séries TV, ce concept/code doit être en mesure d'appliquer à beaucoup de choses..

La seule pensée que j'ai eu était une liste des dicts dans le format:

checker = [
{
    'name':'valid files',
    'type':'file',
    'function':check_valid(), # runs check_valid() on all files
    'status':0 # if it returns True, this is the status the file gets
}
Était-ce utile?

La solution

Je veux ajouter une règle qui vérifie la présence d'un folder.jpg fichier dans chaque répertoire, mais pour ajouter ce serait rendre le code beaucoup plus salissant dans son état actuel..

Cela n'a pas l'air mauvais.En fait, votre code actuel, il le fait très bien, et Sven mentionné une bonne façon de le faire ainsi:

  1. Obtenir une liste de tous les fichiers
  2. Case à cocher pour "nécessaire" des fichiers

Vous ont de l'ajouter à votre dictionnaire une liste de fichiers requis:

checker = {
  ...
  'required': ['file', 'list', 'for_required']
}

Aussi loin qu'il y a un mieux/extensible façon de le faire?Je n'en suis pas sûr.Je ne pouvais vraiment penser à un moyen pour éventuellement déposer le "multiple", les expressions régulières et construire de Sven l'idée d'utiliser un délimiteur.Donc ma stratégie serait la définition d'un dictionnaire comme suit (et j'en suis désolé, je ne connais pas la syntaxe de Python et je suis un peu paresseux pour le chercher, mais il doit faire sens.L' /regex/ est un raccourci pour une regex):

check_dict = {
  'delim'    : /\-/,
  'parts'    : [ 'Show Name', 'Episode Name', 'Episode Number' ],
  'patterns' : [/valid name/, /valid episode name/, /valid number/ ],
  'required' : ['list', 'of', 'files'],
  'ignored'  : ['.*', 'hidden.txt'],
  'start_dir': '/path/to/dir/to/test/'
}
  1. Diviser le nom de fichier basé sur le séparateur.
  2. Vérifiez chacune des parties.

Parce que c'est une liste ordonnée, vous pouvez déterminer ce que les parties sont manquantes et si un article ne correspond pas à n'importe quel motif il est mal formé.Ici la parts et patterns avoir un rapport de 1 pour 1.Deux tableaux au lieu d'un dictionnaire applique la commande.

Ignoré et fichiers requis peuvent être répertoriés.L' . et .. les fichiers doivent probablement être ignoré automatiquement.L'utilisateur doit être autorisé à l'entrée "globules", qui peut être shell élargi.Je pense ici à svn:ignore propriétés, mais d'expansion est naturel pour lister les fichiers.

Ici start_dir serait par défaut le répertoire courant, mais si vous voulez qu'un seul fichier pour exécuter des tests automatisés d'un tas de répertoires que ce serait utile.

Le réel extrémité libre est ici le chemin d'accès de modèle et le long des mêmes lignes de ce chemin d'accès est requis pour "valide les fichiers".Je ne pouvais vraiment pas venir avec une idée solide sans avoir à écrire une grande expression régulière et la prise de groupes d'elle...pour créer un modèle.Il se sent beaucoup comme la rédaction d'un TextMate grammaticales de la langue.Mais qui commence à s'aventurer sur la facilité d'utilisation.Le véritable problème est que le chemin d'accès du modèle n'était pas composé de parts, ce qui est logique, mais ajoute de la complexité.

Cette stratégie est-elle en accord avec ce que vous pensiez?

Autres conseils

peut-être vous devriez prendre l'approche de la valeur par défaut:"le nom de fichier est correct" et de travailler à partir de là pour réfuter cette affirmation:

avec le fait d'autoriser uniquement les noms de fichiers avec:'afficher le nom', 'saison nombre x numéro d'épisode' et 'épisode de nom", vous savez pour certain que ces éléments doivent être séparés par un "-" (tiret) donc, vous devez avoir 2 personnes pour un nom de fichier correct.
si cela est vérifié, vous pouvez utiliser votre code pour vérifier que le spectacle est le nom correspond au nom du spectacle comme on le voit dans le parent du dossier parent (insensible à la casse je suppose), la saison numéro correspond à la parents dossier valeur numérique (avec ou sans supplément de 0 ajouté).

si toutefois vous ne voyez pas la bonne quantité de traits instantanément savoir qu'il ya quelque chose de mal et s'arrête avant que le reste des tests, etc.

et, séparément, vous pouvez vérifier si le fichier folder.jpg existe et prendre les mesures nécessaires. ou faire le premier et le filtre de ce fichier à partir du reste des fichiers dans ce dossier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top