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

时间:2016-12-07 17:12:27

标签: python json dictionary file-handling

我需要做两件事。

  

首先,获取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. 我需要注意的任何错误情况?

1 个答案:

答案 0 :(得分:2)

有些事情需要注意,是的:

i)由于某种原因requestNone时,您正在将空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)为什么不一次创建dict?

    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)确保此文件位于具有SAFE权限的SAFE位置。这是敏感数据,例如与身份验证相关的任何内容。

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

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