【问题标题】:Python output boolean variable to file (read, check, write)Python 将布尔变量输出到文件(读取、检查、写入)
【发布时间】:2020-10-28 07:28:56
【问题描述】:

我是 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 config files parser
  • 你用谷歌搜索过如何将内容写入文件吗?如何从文件中读取内容?您的代码没有显示任何写入/读取的尝试。 '已经有几十个关于文件写入的问题,f.e. this 在 SO。在Input&Output, reading and writing files 处的文档中处理了要归档的持久性内容。
  • 目前这个问题是一个“给我代码”请求,没有花费自己的精力,也不清楚真正的问题在哪里——“我不知道该怎么做 X”不是 SO-Question 的理由. “我试过 Y 并且发生了这种情况,我在 here 阅读了它,这就是我的问题”可能是其中之一。

标签: python python-3.x


【解决方案1】:

如果您的文件不需要可移植,最简单的解决方案是使用 python pickling。缺点是您不能手动检查文件或修改它以用于调试目的而不是基于文本的保存(例如 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

【讨论】:

    【解决方案2】:

    您可以创建一个文件history.txt,然后在启动时打开它,并读取最后的状态,如果不同,则覆盖文件中的该状态并保存。

    【讨论】:

    • 是的,我同意,但在任何检查期间状态可能会发生变化。所以我需要在每次检查时保存更改。但是如何在代码中实现呢?
    【解决方案3】:

    根据您在 cmets 中写的内容,我会将其更改为:

    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
    

    【讨论】:

    • 我需要更多时间来解决这个问题。谢谢。
    • 我是否正确理解了写作的本质和语法? def init(): ping_data = dict() with open('C:\ping_data.json') as file: data = json.load(file)def ping_host(address): status = ping_url(address.address) for k in data: for address.status in data[k]: if address.status != status ping_data['address.status'] = status send_message(( "! " if status is None else "+ " if status else "- ") + address.comment) with open('C:\ping_data.json', 'w') as file: json.dump(ping_data, file, indent=2)
    • Error-python C:\main_3.py File "C:\main_3.py", line 13 data = json.load(file) ^ IndentationError: unindent does not match any external indentation level I don '没有这样的文件......现在我不明白如何自己制作)或者让它为空?
    • 创建了一个空文件 - main_3.py",第 61 行 ping_data['address.status'] = status ^ TabError: 缩进中制表符和空格的使用不一致
    • 您绝对应该删除您创建的文件并检查代码中的缩进是否必须匹配
    猜你喜欢
    • 2018-08-07
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 2017-10-03
    相关资源
    最近更新 更多