2017-08-17 61 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