在Python中:如何在dict更改后自动保存到文件?

时间:2018-08-23 21:34:08

标签: python file dictionary

更改dict中的值后,我想自动将dict保存到文件中。我已经保存到文件了,但是如何检测到更改并触发保存?

我正在使用Python 3.7

1 个答案:

答案 0 :(得分:2)

一种选择是在修改dict的代码中的所有点进行文件写入。

另一种方法是将自定义方法与装饰器一起使用以对字典进行任何更改。看起来像:

import json
import functools

# decorator to save functions return value to a file.
def decorated_change(func):
    @functools.wraps(func)
    def wrap(*args, **kwargs):
        f = func(*args, **kwargs)
        with open('file.txt', 'w') as file:
            file.write(json.dumps(f))
    return wrap

@decorated_change
def set_dict_entry(dict, key, value):
    dict[key] = value

理想情况下,您将创建自己的字典类,并将类似的修饰符应用于 setitem 方法,如下所示:

class modified_dict(dict):
    @some_decorator
    def __setitem__(self, i, y):
        super().__setitem__

另外,正如其他人指出的那样,您可以完全放弃装饰器:

class modified_dict(dict):
    def __setitem__(self, i, y):
        super().__setitem__
        with open('file.txt', 'w') as file:
            file.write(json.dumps(f))

但是,如果您打算将此类型的机制应用于其他数据结构,则最好与装饰器一起遵循DRY原则。