通过重新启动保存Python脚本的进度



我想首先说,我对Python非常陌生,我开始这个项目是为了好玩。

具体来说,它只是一个在一天中定期向你发送赞美通知的程序。这不是为学校准备的,事实上,我只是在向我的女朋友介绍Python时试着做这件事。

考虑到这一点,这是我的问题。我通过编写最简单的版本开始了这个项目:每次加载计算机时都必须启动一个版本,并在积极使用计算机时运行。这部分效果很好;然而,我似乎不知道如何做下一步:让程序在重新启动后正常运行,并保存进度。

我知道如何让它在重新启动后重新启动。尽管如此,我不确定如何保存它的进度。特别是,由于我从文本文件中提取赞美,我不知道如何让程序在重新启动前保存它所在的行。这是必要的,因为我不希望节目每次都从第一句赞美开始,因为到目前为止,已经有300多个独特的赞美了。

为了帮助您了解我的代码目前的位置,以获得最佳建议,我在下面展示了它:

import datetime
import time
from plyer import notification
Compliment = None
try:
with open('C:/Users/conno/Documents/compliments.txt') as f:
lines = f.readlines()
except:
print("I'm sorry, I can't give you a new compliment today because I can't find the file.")
for compliment in lines:
notification.notify(
title = "Your New Compliment for {}".format(datetime.date.today()),
message = compliment,
app_icon = "C:/Users/conno/Downloads/Paomedia-Small-N-Flat-Bell.ico",
timeout = 10
)
time.sleep(60*30)

我知道我可以很容易地得到一个变量计数,它在哪一行,但我该如何保存这个值?

您可以简单地将计数(最后一行的索引(作为整数保存在pickle文件中,或者更容易地保存在文本文件中,并在每次重新启动脚本时从中读取。

import datetime
import time 
from plyer import notification
Compliment = None
compliment_index = 0
try:
with open('C:/Users/conno/Documents/compliments.txt') as f:
lines = f.readlines()
except: 
print("I'm sorry, I can't give you a new compliment today because I can't find the file.")
try:
with open('C:/Users/conno/Documents/compliments_counter.txt') as f:
compliment_index = int(f.readlines()[0])
except:
with open('C:/Users/conno/Documents/compliments_counter.txt', "w") as f:
f.write(str(compliment_index))
for index in range(compliment_index, len(lines)):
compliment = lines[index]
notification.notify(
title = "Your New Compliment for {}".format(datetime.date.today()),
message = compliment,
app_icon = "C:/Users/conno/Downloads/Paomedia-Small-N-Flat-Bell.ico", 
timeout = 10)
with open('C:/Users/conno/Documents/compliments_counter.txt', "w") as f:
f.write(str(index))

time.sleep(60*30)

在程序关闭之前,您应该将索引保存到文件或其他文件中。

请查看:atexit--退出处理程序

最新更新