2017-08-29 16 views
2

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?

+0

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

Répondre

0
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

2

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] 
+0

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

+0

Mon code (correctement, j'affirme) renvoie 14 pour le numéro de version de cet UUID. Quel comportement vous attendiez-vous? –

+0

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