2017-08-17 77 views
0

我试图做一个脚本,生成一个20位数的随机字符串。但是这些字符串必须是唯一的。需要生成与BDD的蟒蛇中的唯一编号

想象一下,我今天生成20000个随机字符串,明天20000个其他字符串我需要确保我有40000个不同的字符串。

的问题是我有一天近70系列,不知道如何去优化它,就一定要具有唯一的序列具有竞争力的时间的数据量...

感谢你的帮助。

必须符合这个https://ec.europa.eu/health/sites/health/files/files/eudralex/vol-1/reg_2016_161/reg_2016_161_en.pdf

我不能做增量。

+3

是否有任何理由,你不能只是开始00000000000000000001,并移动到00000000000000000002? – bendl

+0

需要随机字符串不增量与一些复杂性 – swaks

回答

1

我同意@ bendl的评论 - 如果您需要它是20位数字,则每次需要新字符串时可以增加一个值。如果它不一定是20位数字,我会说看看python的UUID模块:https://docs.python.org/2/library/uuid.html

此模块创建唯一的ID,可能是你要找的。祝你好运!

0

为确保唯一性,您可以生成字符串作为UUID和时间戳的组合。例如

>>> import uuid 
>>> import time 
>>> my_string = "{}-{}".format(uuid.uuid4(), time.time()) 
>>> print my_string 

'6cc452ac-5b30-47df-8ea4-7170ec1979b1-1502985399.0055182' 
+0

但有可能与此方法重复。我甚至不可能拥有1/10000000的概率0 – swaks

+0

将时间戳作为生成的字符串的一部分将保证值的唯一性,因为您的时间戳会随着时间的推移而不断增加,并且在可见的将来不会重复。您可以使用SQL序列获得相同的结果,下面的示例显示了如何在Python中执行此操作。另外,上面的例子比SQL序列更适合真正的大数据量,如果你需要这个 –

+0

但是我的最多20个字符:/和只有alphanum 感谢你的帮助顺便说一句 – swaks

0

基本上你需要创建一个新的随机字符串,并验证它不会在目前的清单存在(如果你不能检查当前的列表,这不能这样做)。

参考https://docs.python.org/3/library/random.html#random.choices

import string 
import random 

x = 0 
itemlist = [] 

while x < 2000: 
    newitem = ''.join(random.choice(string.ascii_uppercase + string.digits) 
    for _ in range(20)) 

    if newitem not in itemlist: 
     itemlist.append(newitem) 
     x = x + 1 
     print newitem