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

Sor*_*avi -1 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)
})
Run Code Online (Sandbox Code Playgroud)

如何用python生成这个字符串?

Ant*_*ala 7

使用正则表达式替换和secretsPython 3.6 的新模块 - 这不等同于JavaScript代码,因为这个Python代码是加密安全的,并且它产生较少的冲突/可重复序列.

secrets文件说:

秘密模块用于生成适用于管理密码,账户认证,安全令牌和相关秘密等数据的加密强随机数.

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

>>> 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'
Run Code Online (Sandbox Code Playgroud)

你希望这个ID能够真正独一无二,而不是Mersenne Twister MT19937 - random实际上它是为了专门产生一个可重复的数字序列而构建的.

对于Python <3.6,你可以做到

try:
    from secrets import choice
except ImportError:
    choice = random.SystemRandom().choice
Run Code Online (Sandbox Code Playgroud)