Je dois à la fois valider une liste d'UUID et déterminer la version. Par exemple, en utilisant h ttps://www.beautifyconverter.com/uuid-validator.php et en entrant 25CCCA6F-1568-473E-BFED-EC08C31532C6 je peux déterminer qu'il est valide, et la version 4. Je vois de https://www.snip2code.com/Snippet/12614/Validating-a-uuid4-with-Python- et How to determine if a string is a valid v4 UUID? que le module UUID peut valider un à la fois, ou tester pour une version particulière, mais pas sûr si UUID testera les 4 versions et retournera la version.Comment valider la liste des UUID et renvoyer la version UUID?
Répondre
def validate_uuid4(uuid_string):
try:
val = UUID(uuid_string, version=4)
except ValueError:
# If it's a value error, then the string
# is not a valid hex code for a UUID.
return False
return True
Vous pouvez utiliser la fonction ci-dessus pour passer par votre liste de chaînes UUID et il vous dira si une chaîne particulière dans la liste si une version valide 4 UUID
Voici comment j'itératif sur une liste d'UUID potentiels et retourner une liste parallèle avec le numéro de version (si valide) ou None
sinon. Notez en particulier que le constructeur UUID
accepte les chaînes UUID de n'importe quelle version. Si la chaîne est valide, vous pouvez interroger le membre .version
pour déterminer la version.
from uuid import UUID
def version_uuid(uuid):
try:
return UUID(uuid).version
except ValueError:
return None
def version_list(l):
return [version_uuid(uuid) for uuid in l]
if __name__=="__main__":
uuids = (
'0d14fbaa-8cd6-11e7-b2ed-28d244cd6e76',
'6fa459ea-ee8a-3ca4-894e-db77e160355e',
'16583cd3-8361-4fe6-a345-e1f546b86b74',
'886313e1-3b8a-5372-9b90-0c9aee199e5d',
'0d14fbaa-8cd6-11e7-b2ed-28d244cd6e7',
'6fa459ea-ee8a-3ca4-894e-db77e160355',
'16583cd3-8361-4fe6-a345-e1f546b86b7',
'886313e1-3b8a-5372-9b90-0c9aee199e5',
'481A8DE5-F0D1-E211-B425-E41F134196DA',
)
assert version_list(uuids) == [1,3,4,5,None,None,None,None,14]
intéressant, mais il y a une torsion. La liste que je vérifie inclut certains UUID qui ne semblent pas correspondre à un format: 481A8DE5-F0D1-E211-B425-E41F134196DA. Notez le "E" dans la position normalement où la version est. – tpcolson
Mon code (correctement, j'affirme) renvoie 14 pour le numéro de version de cet UUID. Quel comportement vous attendiez-vous? –
lorsque j'essaie votre solution, les retours vierges avec vos données d'exemple, lorsque j'ajoute 481A8DE5-F0D1-E211-B425-E41F134196DA aux listes, l'échec de la traçabilité. Python 2.7.13 64 bits – tpcolson
Vous avez géré la partie la plus difficile. Maintenant, allez découvrir comment boucler en python, et de sortir de la boucle une fois qu'une vraie valeur booléenne est trouvée pour la fonction de validation 'uuid'. – Niloct