如何验证UUID的列表并返回UUID版本?

问题描述:

我需要验证UUID的列表以及确定版本。例如,使用h ttps://www.beautifyconverter.com/uuid-validator.php并输入25CCCA6F-1568-473E-BFED-EC08C31532C6,我可以确定它是有效的和版本4.我从https://www.snip2code.com/Snippet/12614/Validating-a-uuid4-with-Python-How to determine if a string is a valid v4 UUID?可以看出,UUID模块可以一次验证一个,或者测试一个特定的版本,但不确定UUID是否会测试所有4个版本并返回版本。如何验证UUID的列表并返回UUID版本?

+0

你已经处理了最难的部分。现在去了解如何在python中循环,并且一旦为'uuid'验证函数找到了一个真正的布尔值,就从循环中断开。 – Niloct

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 

您可以用上面的功能要经过你的UUID字符串列表,它会告诉你在列表中的特定字符串时是否有效版本4的UUID

这是我会怎么迭代过可能的UUID列表并返回一个并行列表,其中包含版本号(如果有效),否则返回None

尤其要注意UUID构造函数接受任何版本的UUID字符串。如果字符串有效,您可以查询.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

有趣,但有一个转折点。我正在查看的列表包括一些UUID,它们看起来不符合任何格式:481A8DE5-F0D1-E211-B425-E41F134196DA。注意版本所在位置的“E”。 – tpcolson

+0

我的代码(正确的,我断言)返回14该UUID的版本号。你期望什么行为? –

+0

当我尝试您的解决方案时,空白返回您的示例数据,当我将481A8DE5-F0D1-E211-B425-E41F134196DA添加到列表时,回溯失败。 Python 2.7.13 64位 – tpcolson