设为首页 收藏本站
查看: 978|回复: 0

[经验分享] Python——uuid

[复制链接]

尚未签到

发表于 2015-11-30 07:01:57 | 显示全部楼层 |阅读模式
  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_lowUUID的初始32位
time_mid接前一域的16位
time_hi_version接前一域的16位
clock_seq_hi_variant接前一域的8位
clock_seq_low接前一域的8位
nodeUUID的最后48位
timeUUID的总长60位的时间戳
clock_seq14位的序列号



>>> 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_NCS、RFC_4122、RESERVED_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'

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-145067-1-1.html 上篇帖子: python学习笔记四:lambda表达式和switch 下篇帖子: Golang&Python测试thrift
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表