【问题标题】:Saving and Retrieving Python object Attributes values to a file将 Python 对象属性值保存和检索到文件
【发布时间】:2016-12-07 17:12:27
【问题描述】:

我需要做两件事。

首先,取request对象并保存对象属性值 到文件作为一些已知键的值。此文件需要可编辑 保存后,即用户可以修改键的值(所以我用 json 格式)。这是在函数中处理的 save_auth_params_to_file().

其次,以我可以检索的格式获取文件内容 使用键的值。这是在函数中处理的 get_auth_params_from_file.

import json
import os

SUCCESS_AUTH_PARAM_FILE = '/auth/success_auth_params.json'


def save_auth_params_to_file(request):

    auth_params = {}
    if request is not None:
        auth_params['token'] = request.token
        auth_params['auth_url'] = request.auth_url
        auth_params['server_cert'] = request.server_cert
        auth_params['local_key'] = request.local_key
        auth_params['local_cert'] = request.local_cert
        auth_params['timeout'] = request.timeout_secs

    with open(SUCCESS_AUTH_PARAM_FILE, 'w') as fout:
        json.dump(auth_params, fout, indent=4)


def get_auth_params_from_file():
    auth_params = {}
    if os.path.exists(SUCCESS_AUTH_PARAM_FILE):
        with open(SUCCESS_AUTH_PARAM_FILE, "r") as fin:
            auth_params = json.load(fin)

    return auth_params

问题:

  1. 有没有更pythonic的方式来实现这两件事?

  2. 我忽略了代码中的任何潜在问题?

  3. 我需要注意哪些错误情况?

【问题讨论】:

    标签: python json dictionary file-handling


    【解决方案1】:

    有几点需要注意,是的:

    i) 当您的 request 出于某种原因是 None 时,您将一个空的 JSON 对象保存到您的文件中。也许只有当request 不是None 时您才想写入文件?

    auth_params = {}
    if request is not None:
        auth_params['token'] = request.token
        auth_params['auth_url'] = request.auth_url
        auth_params['server_cert'] = request.server_cert
        auth_params['local_key'] = request.local_key
        auth_params['local_cert'] = request.local_cert
        auth_params['timeout'] = request.timeout_secs
    
        with open(SUCCESS_AUTH_PARAM_FILE, 'w') as fout:
            json.dump(auth_params, fout, indent=4)
    

    ii) 为什么不一次性创建字典?

        auth_params = {
            'token': request.token,
            'auth_url': request.auth_url,
            'server_cert': request.server_cert,
            'local_key': request.local_key,
            'local_cert': request.local_cert,
            'timeout': request.timeout,
        }
    

    iii) 确保此文件位于具有安全权限的安全位置。这是敏感数据,例如与身份验证相关的任何数据。

    iv) 每次调用 save_auth_params_to_file 时,您都会覆盖您的文件。也许您的意思是将您的 JSON 附加到文件而不是覆盖?如果是这样的话:

    with open(SUCCESS_AUTH_PARAM_FILE, 'a') as fout:
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-12
      • 2020-06-09
      • 2016-02-21
      • 2016-04-21
      • 2013-09-03
      • 2018-11-20
      相关资源
      最近更新 更多