Me gustaría comenzar diciendo que soy muy nuevo en Python y comencé este proyecto por diversión.
Específicamente, es simplemente un programa que te envía cumplidos como notificaciones periódicamente a lo largo del día. Esto no es para la escuela, y en realidad solo estaba tratando de hacerlo para mi novia mientras me presentaba a Python.
Con eso en mente, aquí está mi problema. Comencé este proyecto escribiendo la versión más simple: una que debe iniciar cada vez que se carga la computadora y se ejecuta mientras la usa activamente. Esta porción funciona perfectamente; sin embargo, parece que no puedo descifrar cómo hacer el siguiente paso: hacer que el programa continúe normalmente después de reiniciar y guardar su progreso.
Sé cómo hacer que se inicie de nuevo después de reiniciar. Aún así, no estoy seguro de cómo guardar su progreso. Particularmente, dado que estoy sacando los cumplidos de un archivo de texto, no estoy seguro de cómo hacer que el programa guarde en qué línea está antes de reiniciar. Esto es necesario porque no quiero que el programa comience desde el primer cumplido cada vez, ya que hay más de 300 únicos a partir de ahora.
Para ayudarlo a comprender dónde se encuentra actualmente mi código en cuanto al mejor consejo, lo muestro a continuación:
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)Sé que podría tener fácilmente un conteo variable en qué línea está, pero ¿cómo guardo ese valor?
Simplemente puede guardar el conteo (que es el índice de la última línea de cumplido) como un número entero en un archivo pickle, o más fácil en un archivo de texto y leerlo cada vez que su secuencia de comandos se inicia después de reiniciar.
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)Bueno, deberías guardar un índice en un archivo o algo así antes de que el programa se apague.
Mira esto: atexit — Controladores de salida