Je suis en train de programmer un bot IRC et XMPP qui doit convertir l'entrée fournie par l'utilisateur en un nom de fichier. J'ai déjà écrit une fonction pour le faire. Est-ce assez sain d'esprit?Créer des noms de fichiers à partir de userinput en Python
Voici le code:
allowednamechars = string.ascii_letters + string.digits + '_+/$.-'
def stripname(name, allowed=""):
""" strip all not allowed chars from name. """
n = name.replace(os.sep, '+')
n = n.replace("@", '+')
n = n.replace("#", '-')
n = n.replace("!", '.')
res = u""
for c in n:
if ord(c) < 31: continue
elif c in allowednamechars + allowed: res += c
else: res += "-" + str(ord(c))
return res
Il est un whitelist avec le code supplémentaire pour supprimer les caractères de contrôle et de remplacer os.sep, ainsi que quelques repaces pour rendre le nom de fichier Google App Engine compatible.
Le bot en question est au http://jsonbot.googlecode.com.
Alors, qu'en pensez-vous?
Que se passe-t-il si un utilisateur donne '../../../../ fubar' comme nom de fichier? Assurez-vous de toujours sauvegarder dans le bon répertoire. Aussi, que se passe-t-il si le fichier existe déjà? – Patrick
En particulier, sur Windows 'os.sep' est \, mais/fonctionne aussi comme séparateur. –
Pouvez-vous expliquer quel est le point de la conversion? Avez-vous besoin d'unicité? Récupérabilité? Dans votre code, il peut y avoir des collisions, et il n'est pas clair si vous voulez les éviter ou non. –