0 votes

Erreurs potentielles avec ma fonction makeValidFilename ?

Il s'inspire de "Comment créer un nom de fichier Windows valide à partir d'une chaîne arbitraire ?" J'ai écrit une fonction qui prend une chaîne arbitraire et en fait un nom de fichier valide.

Ma fonction devrait techniquement être une réponse à cette question, mais je veux m'assurer que je n'ai rien fait de stupide, ou oublié quelque chose, avant de la poster comme réponse.

J'ai écrit ceci dans le cadre de tvnamer - un utilitaire qui prend les noms de fichiers d'épisodes TV, et les renomme de façon agréable et cohérente, avec un épisode tiré de http://www.thetvdb.com - alors que le nom du fichier source doit être un fichier valide, le nom de la série est corrigé, ainsi que le nom de l'épisode - donc les deux peuvent théoriquement contenir n'importe quels caractères. Je ne suis pas tant préoccupé par la sécurité que par la facilité d'utilisation - c'est surtout pour éviter que les fichiers soient renommés .some.series - [01x01].avi et le fichier qui "disparaît" (plutôt que de contrecarrer des personnes mal intentionnées)

Il fait quelques hypothèses :

  • Le système de fichiers prend en charge les noms de fichiers Unicode. HFS+ et NTFS le font tous les deux, ce qui couvrira une majorité d'utilisateurs. Il existe également un normalize_unicode argument pour éliminer les caractères Unicode (dans tvnamer, ceci est défini via le fichier XML de configuration)
  • La plate-forme est soit Darwin, soit Linux, et tout le reste est traité comme Windows.
  • Le nom de fichier est censé être visible (pas un fichier point comme .bashrc ) - il serait assez simple de modifier le code pour permettre à .abc formatez les noms de fichiers, si vous le souhaitez

Des choses que j'ai (heureusement) gérées :

  • Faire précéder le trait de soulignement si le nom de fichier commence par . (empêche les noms de fichiers . .. et les fichiers de disparaître)
  • Supprimer les séparateurs de répertoire : / sur Linux, et / y : sur OS X
  • Suppression des caractères non valides des noms de fichiers Windows \/:*?"<>| (sous Windows, ou forcé avec windows_safe=True )
  • Faire précéder les noms de fichiers réservés d'un trait de soulignement ( COM2 devient _COM2 , NUL devient _NUL etc)
  • Normalisation facultative des données Unicode, de sorte que å devient a et les caractères non convertibles sont supprimés
  • Troncature des noms de fichiers de plus de 255 caractères sur Linux/Darwin, et de 32 caractères sur Windows

Le code et un certain nombre de cas de test peuvent être trouvés et manipulés à l'adresse suivante http://gist.github.com/256270 . Le code de "production" peut être trouvé dans tvnamer/utils.py

Y a-t-il des erreurs avec cette fonction ? Des conditions que j'ai manquées ?

1voto

Dominik Weber Points 491

Un point que j'ai remarqué : Sous NTFS, certains fichiers ne peuvent pas être créés dans des répertoires spécifiques. Par exemple : $Boot dans Root

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X