python保存一些用户配置-put_property-get_property

时间:2021-11-22 07:13:01

之前使用的h5py,打包之后多了100多m,显然不爽,重新封装,代码如下:

# coding=utf-8
import json

# 保存数据的文件名
FILENAME = 'properties.json'


def __read_file():
"""
读取文件所有内容。
:return:
"""

f = open(FILENAME, 'a+')
json_text = f.read()
f.close()
return json_text


def __write_file(json_text):
"""
所有内容覆盖到文件中。
:param json_text:
:return:
"""

try:
f = open(FILENAME, 'w')
f.write(json_text)
f.close()
return True
except Exception:
return False


# 把数据读取到内存中
properties = {}
text = __read_file()
if len(text) > 0:
properties = json.loads(text)


def put_property(key, value):
"""
保存一个属性。如果key不存在,则创建;存在,则覆盖。
:param key: str.
:param value: str.
:return: bool.
"""

properties[key] = value
json_text = json.dumps(properties)
__write_file(json_text)


def get_property(key, default=None):
"""
获取一个属性值。如果不存在,则返回default。
:param key: str.
:param default:
:return:
"""

if key in properties:
return properties.get(key)
else:
return default

# 测试
# print get_property('name') # None
# put_property('name', 'AudienL')
# print get_property('name') # AudienL
# put_property('name', 'Chaochao')
# print get_property('name') # Chaochao
#
# print get_property('ch')
# put_property('ch', u'中文')
# print get_property('ch')
# put_property('ch', u'超超')
# print get_property('ch')

+++++++++++++++++++ 我是一条分割线 +++++++++++++++++++++

如果你用python来写PC桌面程序的话,不管你用wxpython,还是什么其它东西,都会经常需要保存一些配置,以便下次打开使用。比如用户名,不可能每次都让用户输入吧。但是一个小的程序又没必要用数据库,用文件保存又比较麻烦,肿么办呢

搜索了一下,发现 h5py 挺好的,很强大,那么使用起来就必须有点麻烦了,所有这里封装一下,只提供两个方法使用,方便小项目快速直接使用。

安装

HDF5 for Python 官网[http://docs.h5py.org/en/latest/quick.html]

conda install h5py

使用 pip install h5py 下载成功,但是解压安装失败,不造为何。
最后我直接下来了 Anaconda 官网[https://www.continuum.io/downloads]
Anaconda 直接集成了 python 以及一些常用的库,我干脆以后都用 Anaconda 了。

代码

# coding=utf-8
import h5py

PROJECT = 'regulus'

f = h5py.File('%s.hdf5' % PROJECT, 'a')


def put_property(key, value, group=None):
"""
保存一个属性。如果key不存在,则创建;存在,则覆盖。
:param group: str. 分类。
:param key: str.
:param value: str.
:return: bool.
"""

if group is None:
# 直接保存为file的attr
attrs = f.attrs
else:
# 保存为file中名为group的data_set中的attr
if group in f.keys():
data_set = f[group]
else:
data_set = f.create_dataset(group, (10,))
attrs = data_set.attrs

# 保存
if key in attrs.keys():
attrs.pop(key)
attrs[key] = value


def get_property(key, group=None, default=None):
"""
获取一个属性值。如果不存在,则返回default。
:param group: str. 分类
:param key: str.
:param default:
:return:
"""

if group is None:
attrs = f.attrs
else:
if group in f.keys():
data_set = f[group]
attrs = data_set.attrs
else:
return default

# 获取值
if key in attrs.keys():
return attrs[key]
else:
return default

# 测试
# print get_property('name') # None
# put_property('name', 'AudienL')
# print get_property('name') # AudienL
# put_property('name', 'Chaochao')
# print get_property('name') # Chaochao
#
# print get_property('name', 'user') # None
# put_property('name', 'aaa', 'user')
# print get_property('name', 'user') # aaa
# put_property('name', 'bbb', 'user')
# print get_property('name', 'user') # bbb
#
# print get_property('ch')
# put_property('ch', u'中文')
# print get_property('ch')
# put_property('ch', u'超超')
# print get_property('ch')

小项目拿来直接使用,爽歪歪!
发现python也是爽歪歪的!