Python将布尔变量输出到文件(读取、检查、写入)



我是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

最新更新