2017-08-29 106 views
2

我需要驗證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

回答

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 

您可以用上面的功能要經過你的UUID字符串列表,它會告訴你在列表中的特定字符串時是否有效版本4的UUID

2

這是我會怎麼迭代過可能的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