Python——uuid


  uuid模塊在Python 2.5以后引入,接口包括:不可變對象UUID(UUID類)和函數uuid1()、uuid3()、uuid4()和uuid5(),后面的四個函數用於生成 RFC 4122 規范中指定的第1、3、4、5版UUID。使用uuid1()或uuid4()可以獲得一個唯一的ID,uuid1()包含了主機的網絡名稱,uuid4()不涉及網絡主機名,僅生成一個隨機UUID,因此從隱私保護角度uuid4()更加安全。

 

 class uuid.UUID([hex[, bytes[, bytes_le[, fields[, int[, version]]]]]]) 

  該類用於從參數給定的內容中實例化UUID對象(hex, bytes, bytes_le, fields, int 必須且只能指定一個):

  hex:指定32個字符以創建UUID對象,當指定一個32個字符構成的字符串來創建一個UUID對象時,花括號、連字符和URN前綴等都是可選的;

  bytes:指定一個大端字節序的總長16字節的字節串來創建UUID對象;

  bytes_le:指定一個小端字節序的總長16字節的字節串來創建UUID對象;

  fields:指定6個整數域,共計128位來創建UUID(其中,32位作為time_low段,16位作為time_mid段,16位作為time_hi_version段,8位作為clock_seq_hi_variant段,8位作為clock_seq_low段,48位作為node段);

  int:直接指定一個長度為128個二進制位的整數用於創建UUID對象;

  version:(可選)指定UUID的版本,從1到5,一旦指定了該參數,生成的UUID將具有自己的變體(variant)和版本數,具體請參考RFC 4122,

 

 例.

下面的各種方法創建相同的UUID對象,

u = UUID('{12345678-1234-5678-1234-567812345678}')
u = UUID(hex = '12345678123456781234567812345678')
u = UUID('urn:uuid:12345678-1234-5678-1234-567812345678')
u = UUID(bytes='\x12\x34\x56\x78'*4)
u = UUID(bytes_le='\x78\x56\x34\x12\x34\x12\x78\x56' +
              '\x12\x34\x56\x78\x12\x34\x56\x78')
u = UUID(fields=(0x12345678, 0x1234, 0x5678, 0x12, 0x34, 0x567812345678))
u = UUID(int=0x12345678123456781234567812345678)

 

UUID對象含有以下只讀屬性

 UUID.bytes 

  以16個字節構成的字節串形式表示UUID,包含6個大端字節序的整數域;

>>> u.bytes
'\x124Vx\x124Vx\x124Vx\x124Vx'

   

 UUID.bytes_le 

  以16個字節構成的字節串形式表示UUID,包含6個小端字節序的整數域;

>>> u.bytes_le
'xV4\x124\x12xV\x124Vx\x124Vx'

  

  UUID.fields 
  以元組形式存放的UUID的6個整數域,該元組中的6個元素分別可以通過6個屬性查看,還額外導出了兩個屬性(下面的每個域的名稱也是UUID對象的一個屬性):
含義
time_low UUID的初始32位
time_mid 接前一域的16位
time_hi_version 接前一域的16位
clock_seq_hi_variant 接前一域的8位
clock_seq_low 接前一域的8位
node UUID的最后48位
time UUID的總長60位的時間戳
clock_seq 14位的序列號
>>> u.fields
(305419896L, 4660L, 22136L, 18L, 52L, 95073701484152L)
 
  UUID.hex 
  以32個字符表示的UUID
>>> u.hex
'12345678123456781234567812345678'
  
  UUID.int 
  以一個長度為128個二進制位的整數表示的UUID;
>>> u.int
24197857161011715162171839636988778104L
  
  UUID.urn 
  以  RFC 4122 中指定的URN形式表示的UUID;
>>> u.urn
'urn:uuid:12345678-1234-5678-1234-567812345678'
  
  UUID.variant 
  UUID變體(variant),決定UUID內部的布局,已有的值為 RESERVED_NCSRFC_4122RESERVED_MICROSOFT 或 RESERVED_FUTURE
>>> u.variant
'reserved for NCS compatibility'
  
  UUID.version 
  UUID版本,只有當變體為  RFC_4122 時才有效。
>>> u.version
>>>

  這里由於u.variant == 'reserved for NCS compatibility',所以此處u.version為空。

  
uuid模塊還定義了如下函數
 
  uuid.getnode() 
   獲取硬件的地址並以48位二進制長度的正整數形式返回,這里所說的硬件地址是指網絡接口的MAC地址,如果一個機器有多個網絡接口,可能返回其中的任一個。如果獲取失敗,將按照RFC 4122的規定將隨機返回的48位二進制整數的第8位設置成1。
>>> uuid.getnode()
152667293855L
  
 uuid.uuid1([node[, clock_seq]]) 
  利用主機ID、序列號和當前時間生成一個UUID,如果參數 node 沒有給定,會調用 getnode() 來獲取硬件地址。如果參數中指定了 clock_seq ,使用參數中給定的時鍾序列作為序列號,否則使用一個隨機的14位長的序列號。
>>> uuid.uuid1()
UUID('a89e9d00-a710-11e4-a84a-00238bae089f')
  
  uuid.uuid3(namespace, name) 
  基於命名空間標識符(實質上是一個UUID)和一個名稱(實質上是一個字符串)的MD5哈希值生成UUID。
  
  uuid.uuid4() 
   生成一個隨機的UUID
>>> uuid4()
UUID('b9f9fb88-49f3-4cea-9885-19e57c3572c6')
  
  uuid.uuid5(namespace, name) 
   基於命名空間標識符(實質上是一個UUID)和一個名稱(實質上是一個字符串)的SHA-1哈希值生成UUID
  
關於uuid3()和uuid5()中提到的命名空間標識符,uuid模塊定義了如下的備選項
  uuid.NAMESPACE_DNS 
  當指定該命名空間時,參數 name 是一個完全限定的(fully-qualified)域名
  
  uuid.NAMESPACE_URL 
  當指定該命名空間時,參數 name 是一個URL
  
  uuid.NAMESPACE_OID 
  當指定該命名空間時,參數 name 是一個ISO OID
  
  uuid.NAMESPACE_X500 
  當指定該命名空間時,參數 name 是一個DER格式或文本格式的X.500 DN。
  
關於屬性variant,uuid模塊定義了如下的常量
  
 uuid.RESERVED_NCS 
  該常量為兼容NCS而保留;
  
  uuid.RFC_4122 
   按照 RFC 4122 的規定來確定UUID的布局;
  
  uuid.RESERVED_MICROSOFT 
   該常量位兼容微軟而保留
   
  uuid.RESERVED_FUTURE 
   該常量為未來可能的定義保留
可以在Python中查看這些常量:
>>> uuid.RESERVED_NCS
'reserved for NCS compatibility'
>>> uuid.RFC_4122
'specified in RFC 4122'
>>> uuid.RESERVED_MICROSOFT
'reserved for Microsoft compatibility'
>>> uuid.RESERVED_FUTURE
'reserved for future definition'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM