我是python的新手。
告诉我如何实现将变量的值保存到文件中,这样在程序重新启动时就不会收到不必要的通知。
该程序对服务器进行ping,并在状态更改时发送消息。当您重新启动程序时,它不会保存其检查的历史记录。这很不舒服。
我希望我正确地解释了这个问题?
我需要不断地将检查结果保存到一个文件中,并在比较新的检查时使用这些数据。
def ping_host(address):
status = ping_url(address.address)
if status != address.status:
send_message(( "! " if status is None else "+ " if status else
"- ") + address.comment)
address.status = status
此功能检查状态,如果状态已更改,则会发送一条新消息。
如果您的文件不需要可移植,最简单的解决方案就是使用python pickle。缺点是,与基于文本的保存(例如ini文件、json或简单的txt(相比,您无法手动检查文件或出于调试目的对其进行修改。主要优点是易于使用,因为您可以通过这种方式串行化任何python基本类型。
下面是一个关于如何使用它的简单示例:
import pickle
def get_status():
with open('status','rb') as f:
status = pickle.load(f)
return status
def set_status(status:bool):
with open('status','wb') as f:
pickle.dump(status,f)
set_status(True)
s = get_status()
assert s
set_status(False)
s = get_status()
assert not s
您可以创建一个文件history.txt,然后在启动时打开它,读取最后的状态,如果不同,则覆盖文件中的状态并保存。
根据您在评论中所写的内容,我将其更改为:
import json
ping_data = dict()
with open('C:ping_data.json') as file:
data = json.load(file)
def ping_host(address):
status = ping_url(address.address)
if data['address.status'] != status:
ping_data['address.status'] = status
send_message(("! " if status is None else "+ " if status else "- ") + address.comment)
ping_host(youraddress)
with open('C:ping_data.json', 'w') as file:
json.dump(ping_data, file, indent=2)
我的方法是使用json库
import json
接下来我会在你的脚本中创建一个字典
saved_data = dict()
然后每当我收到更新时,我都会将值存储在字典中
saved_data['info'] = updated_info
和出口?将其转换为json文件
with open('saved_data.json', 'w') as file:
json.dump(saved_data, file, indent=2)
现在,每当我打开程序时,它都会像这个一样读取该文件
with open('saved_data.json') as file:
data = json.load(file)
然后我会访问变量数据作为字典
for k in data:
for info in data[k]:
if info != updated_info
saved_data['info'] = updated_info