使用python生成自定义格式化字符串

时间:2017-08-14 08:58:48

标签: python uuid

我有一个生成字符串(类似于uuid)字符串

的Javascript代码

这是js代码:

var t = "xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxx"
  , i = (new Date).getTime();
return e = t.replace(/[x]/g, function() {
    var e = (i + 16 * Math.random()) % 16 | 0;
    return i = Math.floor(i / 16),
    e.toString(16)
})

如何使用python生成此字符串?

3 个答案:

答案 0 :(得分:7)

使用正则表达式替换和Python 3.6的新secrets模块 - 这不等同于JavaScript代码,因为此Python代码具有加密安全性,并且生成较少的冲突/可重复序列

secrets documentation says

  

秘密模块用于生成适用于管理密码,帐户身份验证,安全令牌和相关机密等数据的加密强随机数。

     

特别是,应该优先使用秘密,而不是随机模块中的默认伪随机数生成器,该模块专为建模和模拟而设计,而不是安全或加密。

>>> import re
>>> from secrets import choice
>>> re.sub('x', 
           lambda m: choice('0123456789abdef'), 
           'xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxx')
'5baf40e2-13ef-4692-8e33-507b-40fb84ff'

您希望您的ID真正尽可能独一无二,而不是Mersenne Twister MT19937 - 使用random,而try: from secrets import choice except ImportError: choice = random.SystemRandom().choice 实际上是为了专门产生可重复的数字序列。

对于Python< 3.6,你可以做

public static async Task<T> LoadObject<T>(string objectId) where T : DBObject
{
    ...
    TestAttribute MyAttribute = (TestAttribute)System.Attribute.GetCustomAttribute(typeof(T), typeof(TestAttribute));
    ...
}

答案 1 :(得分:1)

Python默认生成UUID代:

>>> import uuid
>>> uuid.uuid4()
UUID('bd65600d-8669-4903-8a14-af88203add38')
>>> str(uuid.uuid4())
'f50ec0b7-f960-400d-91f0-c42a6d44e3d0'
>>> uuid.uuid4().hex
'9fe2c4e93f654fdbb24c02b15259716c'

答案 2 :(得分:1)

所以基本上你想要一些随机的十六进制数字:

from random import randint
'-'.join(''.join('{:x}'.format(randint(0, 15)) for _ in range(y)) for y in [10, 4, 4, 4, 10])

其中10,4,4,4,10是格式字符串中每个段的长度。你可能想要添加一个种子,但基本上这就是你的JS代码所做的,产生像'f693a7aef0-9528-5f38-7be5-9c1dba44b9'这样的字符串。