2017-08-17 12 views
0

20桁のランダムな文字列を生成するスクリプトを実行しようとしています。しかし、これらの文字列は一意でなければなりません。BDDでPythonで一意の番号を生成する必要があります

今日は20000個のランダムな文字列を生成し、明日20000個の他の文字列を生成すると想像してください。40000個の異なる文字列があることを確認する必要があります。あなたの助けのための

問題は、私は日によってほぼ700000シリアルを持っており、競争力のある時間を持つユニークなシリアルを持って確認するためにそれを最適化する方法がわからないデータの量です...

ありがとうございます。

は、私は、増分を行うことはできません。この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桁である必要があれば、あなたは新しい文字列が必要になるたびに1つの値だけ増やすことができます。もし20桁でなければ、私はPythonのUUIDモジュールを見てみましょう:https://docs.python.org/2/library/uuid.html

このモジュールは、あなたが探しているものである可能性があります。がんばろう!

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文字は、/と英字のみです。 ご協力ありがとうbtw – 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 
関連する問題