将 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
问题:
是否有更 pythonic 的方法来实现这两件事?
我忽略了代码中的任何潜在问题?
有什么错误情况需要我注意吗?
有些地方需要注意,是的:
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:
我需要完成两件事。
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 functionsave_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
问题:
是否有更 pythonic 的方法来实现这两件事?
我忽略了代码中的任何潜在问题?
有什么错误情况需要我注意吗?
有些地方需要注意,是的:
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: