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_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'
Python——uuid的更多相关文章
- python uuid、hex study
由 import uuid product[“SourceInfo"]["ProductID"] = uuid.uuid4().hex 引起的uuid 一.概述 uuid ...
- python uuid 介绍
1. 背景知识: UUID: 通用唯一标识符 ( Universally Unique Identifier ), 对于所有的UUID它可以保证在空间和时间上的唯一性. 它是通过MAC地址, 时间戳, ...
- python UUID
UUID介绍 UUID是128位的全局唯一标识符,通常由32字节的字符串表示.它可以保证时间和空间的唯一性,也称为GUID,全称为:UUID ―― Universally Unique IDentif ...
- Python uuid库中 几个uuid的区别
在用到uuid库的时候,发现uuid有很多个,比较好奇,就查了一下他们的区别 uuid1()——基于时间戳 uuid2()——基于分布式计算环境DCE(Python中没有这个函数) uuid3()—— ...
- python中uuid来生成机器唯一标识
摘要: 我们可以使用uuid1的后16位来标识一个机器. # use machine specific uuid, last 16 char will be the same if machine ...
- 11 Python Libraries You Might Not Know
11 Python Libraries You Might Not Know by Greg | January 20, 2015 There are tons of Python packages ...
- Django Model field reference
===================== Model field reference ===================== .. module:: django.db.models.field ...
- django 模型类的常见字段约束,以及filter 过滤和查询
null 不设置时默认设置为False.设置为True时,数据库表字段中将存入NULL的记录. null和blank组合使用,null=True,blank=True,表示该字段可以为空 blank ...
- 计算机网络(6): http cookie
Cookie作用: 1)帮助管理用户会话信息(用户需要记录的信息:登陆状态等) 2)跟踪浏览器的行为 3)用户自定义设置 实现方式: 当用户浏览带有Cookie的网站时,网站自动为其生成一个唯一的标志 ...
随机推荐
- 每日英语:Are Smartphones Turning Us Into Bad Samaritans?
In late September, on a crowded commuter train in San Francisco, a man shot and killed 20-year-old s ...
- 关于emoji表情
/** /* 表情编码 /* @param emoji:表情符号 **/ encodeEmoji: function (content) { var imgHtml = ""; v ...
- 应用SAP PI实现SAP BW数据仓库对于第三方系统数据完美集成以及DELTA加载的分析
注明:本篇的技术性细节参考了SAP SCN上的一篇SAP PI 和BW集成的文章,本篇文章并不打算过多探讨实现的技术细节,因为在SCN上的这篇英文文章已经完全涵盖了技术细节和配置步骤 大家可以通过搜索 ...
- 这到底是什么bug?---已结贴
问题描述:全局变量,会被莫名其妙更改!打印为50,后面做比较的时候这个值为0了. 第一,我肯定没有犯低级错误,没有其他的更改,搜索全部代码,没有发现这个变量因为我程序问题导致不符合预期,同时找了两位同 ...
- Windows + Ubuntu双系统时间不一致
在安装Ubuntu和Windows双系统的情况下,Ubuntu的时间总会和Windows的时间相差8小时,原因在于widows认为BIOS时间是本地时间,Ubuntu认为BIOS时间是UTC时间 su ...
- ADO.NET 实体数据模型 异常-“序列化类型为 XX 的对象时检测到循环引用”
发生异常的代码如下: 1: public JsonResult GetSaleByNo1(string id) 2: { 3: SaleMvcUI.Helper.saleDBEntities sale ...
- linux跑火车的命令sl
http://forum.ubuntu.org.cn/viewtopic.php?t=250890 ubuntu下可以通过 apt-get install sl 安装.执行sl会出来什么呢?帖一下: ...
- C语言 · 连续正整数的和
算法训练 连续正整数的和 时间限制:1.0s 内存限制:256.0MB 问题描述 78这个数可以表示为连续正整数的和,1+2+3,18+19+20+21,25+26+27. 输入一个 ...
- 计算MySQL的内存峰值公式
-- 计算MySQL的内存峰值公式,计算所有的连接满了的情况下:select (@@key_buffer_size + @@query_cache_size + @@tmp_table_size ...
- python List的一些相关操作
把一些基础的东西归类整理,作记录. 添加元素 a=[7,8,9,10] a.append('a') #在最后位置添加 a.insert(1,'b') #在指定位置添加 删除元素 del a[1 ...