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

之前使用的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也是爽歪歪的!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值