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

9

你已经处理了最难的部分。现在去找出如何在Python中循环,并且一旦uuid验证函数找到一个真值就从循环中跳出。 - Niloct
2个回答

16

以下是我如何遍历一个潜在 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]

有趣的是,这里有一个曲折。我正在检查的列表包括一些UUID,它们似乎不符合任何格式:481A8DE5-F0D1-E211-B425-E41F134196DA。请注意,在通常版本所在的位置上出现了“E”。 - tpcolson
我的代码(正确地,我断言)返回那个UUID的版本号为14。你期望它有什么行为? - Robᵩ
当我尝试使用您的解决方案和示例数据时,返回空白,当我将481A8DE5-F0D1-E211-B425-E41F134196DA添加到列表中时,出现回溯失败。Python 2.7.13 64位。 - tpcolson

7
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。

1
这将传递一个版本不同于4的有效UUID。即使x是UUIDv1字符串,UUID(x, version=4)也能成功地将x转换为UUIDv4。 - Alessandro Cosentino
如果uuid_string的版本不是4,则此方法无法正常工作。 - Erol

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接