创建python脚本的最佳方法是什么?通过调用它,它将始终生成一个新的UNIQUE ID(自动增量)?
您运行脚本,它会告诉您1,然后关闭脚本并再次打开,它会通知您2。
它的目的是创建一个脚本,该脚本将被跨使用,该ID将用于跟踪最新的更改等
附言:我不是说要做一个能做到这一点的函数。
import uuid
uniqueid = uuid.uuid1()
由于您没有提供任何代码,我也不会提供任何代码。
解决方案1:唯一ID
1)时间:创建函数,为您提供时间戳
2)ID:创建函数,生成带有随机数字和字母的长字符串
- 这当然是"有风险的",因为您有可能生成已经存在的ID,但从统计的角度来看,它被称为"即使可能也不可能">
保存在文件或的某个位置
解决方案2:偏移-增量
1) 有一个0的文件。
2) 打开一个文件,读取行,转换为整数,增量为+1,写入一个文件。
注意:
你的头衔错了。前一刻你在谈论UNIQUE ID,下一刻你正在谈论偏移。唯一的ID和运行python脚本的计数是非常矛盾的想法
我假设你有一个脚本,每次执行它都会产生一些结果。然后你需要一个值,(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
你永远都知道哪个结果比其他结果来得晚。然而,就我个人而言,我宁愿格式化当前时间,它更容易阅读和推理:
>>> from datetime import datetime
>>> datetime.now().strftime('%Y%m%d%H%M%S')
'20190114132407'
这些都是基本的想法,您可能需要注意角落案例和可能的失败(尤其是使用基于文件的解决方案)。也就是说,我认为这些是非常可行的第一步。
技术说明
你想要的是一个程序在两次或多次执行之间记住一条信息,我们有一个技术术语:信息应该是持久的。由于您要求具有自动递增功能,因此需要持久计数。然而,我怀疑,如果您使用时间戳选项,则不需要它。在这里做什么由你决定。
我也有同样的情况。我最终创建了一个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())
如果有任何机会同时访问该文件,最好锁定该文件。如果文件已锁定,请继续尝试。
http://tilde.town/~cristo/file-locking-inpython.html
老答案:您可以将其作为环境变量存储在系统中。如果未设置,则初始化为1。否则将其递增1。