2016-12-07 38 views
1

我需要做两件事情。保存和检索Python对象属性值到一个文件

首先,采取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. 有没有更Python的方式实现两件事情?

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

  3. 任何错误条件我必须小心吗?

回答

2

有一些事情要注意,是:

我)当你的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)为什么不一次性创建字典?

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: