Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
每次使用Python调用时生成始终唯一的ID_Python_Uid - Fatal编程技术网

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

每次使用Python调用时生成始终唯一的ID,python,uid,Python,Uid,创建python脚本的最佳方法是什么?通过调用which,它将始终生成一个新的唯一ID(Autoincremental) 您运行脚本,它会告诉您1,然后关闭脚本并再次打开,它会告诉您2 它的目的是创建一个脚本,该脚本将在多个应用程序中使用,该ID将用于跟踪最新的更改等 顺便说一下,我不是说做一个能做到这一点的函数 如果有可能同时访问该文件,最好锁定该文件。如果文件被锁定,请继续尝试 旧答案: 您可以将其作为环境变量存储在系统上。如果未设置,则初始化为1。否则将其递增1。我假设您有一个脚本,每次

创建python脚本的最佳方法是什么?通过调用which,它将始终生成一个新的唯一ID(Autoincremental)

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

它的目的是创建一个脚本,该脚本将在多个应用程序中使用,该ID将用于跟踪最新的更改等


顺便说一下,我不是说做一个能做到这一点的函数

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

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

我假设您有一个脚本,每次执行时它都会生成一些结果。然后,您需要一个值(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))
保存时间戳 然而,一个更简单的选择不是增加一个值,而是获得一个时间戳。您可以使用,返回自以下时间起的秒数:

你将永远知道哪个结果比其他结果来得晚。然而,就我个人而言,我更倾向于阅读和推理:

>>> from datetime import datetime
>>> datetime.now().strftime('%Y%m%d%H%M%S')
'20190114132407'
这些都是基本的想法,您可能需要注意一些特殊情况和可能的故障(尤其是使用基于文件的解决方案)。也就是说,我想这是非常可行的第一步

技术说明
你想让一个程序在两次或多次执行之间记住一条信息,我们有一个技术术语:信息应该是持久的。因为您要求使用自动递增功能,所以需要一个持久计数。但是,我怀疑,如果使用timestamp选项,则不需要这样做。您可以决定在这里做什么。

因为您没有提供任何代码,所以我也不会提供任何代码

解决方案1:唯一ID

1) 时间:创建给您时间戳的函数

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

  • 这当然是“有风险的”,因为您可能会生成已经存在的ID,但从统计角度来看,这就是所谓的“即使可能也不可能”
保存在文件或某处

解决方案2:补偿-增量

1) 具有包含0的文件

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

注意:

你的标题错了。前一刻你们在谈论唯一ID,下一刻你们在谈论偏移量。唯一ID和运行python脚本的计数是非常矛盾的想法

导入uuid
uniqueid=uuid.uuid1()

我也遇到过同样的情况。我最终创建了一个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())
def itemId_生成器(itemidlelocation):
#从csv文件导入ItemID的值
df=pd.read\u csv(itemIdLocation)
#返回值,该值是csv文件中的当前ItemID
ItemId=df.loc[0,'ItemId']
#如果循环将限制设置为最大项目ID
如果ItemId>=10000:
df.loc[0,'ItemId']=1

elif ItemId您自己尝试过什么吗?如果您想将此脚本作为独立工具运行,它会根据您使用的操作系统给出不同的答案。如果计划让数据库与脚本一起运行,则可以使用数据库设施(例如,在PostgreSQL中使用
序列
nextval
)。如果你有一个共识平台,比如zookeeper,你可以使用zookeeper和Curator来生成它。看看这个模块。@Kevin很抱歉,如果是这样的话,用自动增量编写代码就很容易了。。。。我的问题是关于如何存储此值。例如,我创建了python脚本并编写了一个函数,该函数将自动增加值,但在关闭它之后,记录丢失。所以我需要一些其他python脚本将使用的单点。我目前只能看到创建示例文本文件的方式,该文件将存储值,并且每次在文本中更新该值。但是我相信有一个合适的方法可以做到这一点。@Kevin-P.S.我可以自己编写脚本,我只需要背后的理论,使用什么方法。嗯,进程不能修改调用方的环境。那么重启呢?请给出一点代码(或其他细节)来解释你的想法。如果我看的是你解释的第一部分,这就是我在评论中提到的想法(非常抱歉解释不好)。您认为“这是最好的选择吗?”并发性如何?写入迷你数据库可能更好?最后,我需要一段代码,它将生成唯一的ID并跟踪它,多个脚本可以使用它,但我认为简单地将其写入文件并不是最好的选择。我需要一个单点,通过调用always generate new autoincrement ID。这将允许跟踪更改等。
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())