【问题标题】:Need to generate Unique number in python with BDD需要在 python 中使用 BDD 生成唯一编号
【发布时间】:2017-08-18 21:59:25
【问题描述】:

我正在尝试编写一个生成 20 位随机字符串的脚本。但这些字符串必须是唯一的。

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

问题是我每天有近 700000 个序列的数据量,不知道如何优化它以确保拥有具有竞争力的独特序列......

感谢您的帮助。

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

我不能做增量。

【问题讨论】:

  • 有什么理由不能从 00000000000000000001 开始,然后转到 00000000000000000002?
  • 需要是随机字符串而不是具有一定复杂性的增量

标签: python sql optimization


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    >>> import uuid
    >>> import time
    >>> my_string = "{}-{}".format(uuid.uuid4(), time.time())
    >>> print my_string
    
    '6cc452ac-5b30-47df-8ea4-7170ec1979b1-1502985399.0055182'
    

    【讨论】:

    • 但是这种方法可能会重复。我什至不能有 1/10000000 的概率它必须是 0
    • 将时间戳作为生成字符串的一部分将保证值的唯一性,因为您的时间戳会随着时间的推移而不断增加,并且在可观察的未来永远不会重复。您可以通过使用 SQL 序列来获得相同的结果,下面的示例显示了如何在 Python 中执行此操作。此外,对于真正的大数据量,上面的示例比 SQL 序列具有更好的扩展性,如果您需要的话
    • 但是我最多 20 个字符呢:/ 并且只有 alphanum 谢谢你的帮助顺便说一句
    【解决方案3】:

    基本上你需要创建一个新的随机字符串并验证它不存在于你的当前列表中(如果你不能检查你当前的列表,这不能完成)。

    参考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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      • 2012-04-14
      • 2019-09-14
      • 2017-04-06
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多