每次使用Python调用时都会生成始终唯一的ID

时间:2019-01-14 15:06:23

标签: python uid

创建python脚本的最佳方法是什么,通过调用它,它将始终生成一个新的UNIQUE ID(自动递增)

您运行脚本,它将告诉您1,然后关闭脚本并再次打开,并告诉您2。

目的是创建一个脚本,该脚本将在整个脚本中使用,并且此ID将用于跟踪最新更改等。

P.S。我不是在说要做一个能做到的函数。

5 个答案:

答案 0 :(得分:1)

import uuid

uniqueid = uuid.uuid1()

答案 1 :(得分:0)

我假设您有一个脚本,每次执行该脚本都会产生一些结果。然后,您需要一个值,该值(1)将一个结果与另一个结果区分开,并且(2)显示哪个结果最后。那正确吗?如果是这样,我们在这里有很多选择。在最简单的情况下(脚本始终在同一台计算机上运行),我建议两个选项

将计数保存到文件

在这种情况下,您将拥有一个文件并从中读取编号:

try:
    with open('count.txt') as count_file:
        content = count_file.read()
        count = int(content)
except Exception:
    count = 0

执行完脚本后,您将已读取但递增的值写入文件:

with open('count.txt', 'w') as count_file:
    count_file.write(str(count + 1))

保存时间戳

但是,一个更简单的选择不是增加值而是获得时间戳。您可以使用time.time(),它返回自Unix epoch起的秒数:

>>> import time
>>> time.time()
1547479233.9383247

您将始终知道哪个结果比其他结果晚。但是,就我个人而言,我更愿意format the current time,因为它更易于阅读和推理:

>>> from datetime import datetime
>>> datetime.now().strftime('%Y%m%d%H%M%S')
'20190114132407'

这些是基本思想,您可能需要注意一些极端情况和可能的失败(尤其是基于文件的解决方案)。就是说,我想这些都是可行的第一步。

技术说明

您要在程序中记住两个或多个执行之间的一条信息,对此我们有一个专门的术语:信息应该是持久。由于您要求使用自动递增功能,因此需要持续计数。但是,我怀疑如果使用timestamp选项,则不需要。由您决定在这里做什么。

答案 2 :(得分:0)

由于您未提供任何代码,因此我也将不提供任何代码。

解决方案1:唯一ID

1)时间:创建功能来为您提供时间戳

2) ID :创建函数以生成带有随机数字和字母的长字符串

  • 这当然是“危险的”,因为您有机会生成已经存在的ID,但是从统计的角度来看,它被称为“即使可能也是不可能的”

保存在文件中或其他地方

解决方案2:抵消-增量

1)文件中包含0。

2)打开文件,读取行,转换为整数,递增为+1,写入文件。

注意:

您的标题有误。一会儿谈论UNIQUE ID,一会儿谈论偏移。唯一的ID和正在运行的python脚本计数非常矛盾的想法

答案 3 :(得分:0)

我遇到了同样的情况。我最终创建了一个 CSV 文件,以便我可以映射变量名称。

def itemId_generator(itemIdLocation):
    # Importing value of ItemID from the csv file
    df = pd.read_csv(itemIdLocation)

    #return value which is current ItemID in the csv file
    ItemId = df.loc[0, 'ItemId']

    # If loop to set limit to maximum Item ID
    if ItemId>= 10000:
        df.loc[0, 'ItemId'] = 1

    elif ItemId<10000:
        # updating the column value/data
        df.loc[0, 'ItemId'] = df.loc[0,'ItemId'] + 1
    else:
        print("Invalid value returned")
        sys.exit()

    # writing new ItemID into the file
    df.to_csv(itemIdLocation, index=False)

    # The function .item() converts numpy integer to a normal int
    return str(ItemId.item())

答案 4 :(得分:-1)

如果有可能同时访问文件,则最好锁定文件。继续尝试文件是否被锁定。

http://tilde.town/~cristo/file-locking-in-python.html

旧答案: 您可以将其存储为系统上的环境变量。如果未设置,则初始化为1。否则将其递增1。