2016-12-07 34 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: