将 Python 对象属性值保存和检索到文件

Saving and Retrieving Python object Attributes values to a file

我需要完成两件事。

First, take the request object and save the object attribute values to a file as values of some known keys. This file needs to be editable after saving, ie, a user can modify the values of the keys(So I used json format). This is handled in function save_auth_params_to_file().

Second, get the file contents in a such a format that I can retrieve the values using the keys. This is handled in function 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. 有什么错误情况需要我注意吗?

有些地方需要注意,是的:

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: