尝试在加载此文件时实现缓存

时间:2017-07-02 20:59:51

标签: python json algorithm

缓存的初始大小为20个元素,并且在达到其限制时,要添加任何新元素,它将删除最近最少访问的元素。在关闭时,它应该将缓存的数据存储回文件。应根据缓存策略将数据存储在缓存中。提供缓存CRUD的选项。测试数据集:学生记录。

import json
from collections import OrderedDict
import time
import os

if os.path.exists("qwerty.json"):
    record = json.load(open("qwerty.json", "r"), object_pairs_hook=OrderedDict)
else:
    record = OrderedDict({})

fo = open("foo.txt", "wb")

x = list(record.items())[:20]; x2 = sorted(x, key=lambda k: k[1]['time'], reverse=True)
print(x2)

command = ""
while command != 'exit':
    command = input('Enter a command(options: create,read,save): ')
    if command == "create":
        name = input('Enter name of the Student:')
        p = input('Student ID: ')
        a = input('Class: ')
        n = input('Marks: ')
        time = time.time()

        record[name] = {'Student ID:': p, 'Class:': a, 'Marks': n, 'time': time }

    elif command == 'read':
        z = json.load(open("qwerty.json", "r"), object_pairs_hook=OrderedDict)
        print(z)

    elif command == 'save':
        json.dump(record, open('qwerty.json', "w"))

fo.close()

1 个答案:

答案 0 :(得分:1)

使用jsoncollections.OrderedDict的组合,您实际上可以使用单个文件维护订单。

您的初始设置如下:

from collections import OrderedDict
phone_book = OrderedDict({})

创建时,将元素添加到有序的dict中,然后将其转储为JSON。密钥的顺序被保留。在您如上所述声明phone_book后,create的其余代码保持不变。请注意,当您写入文件时,您不会将其关闭,因此您以后无法读取内容。这应该替换为:

import os

if os.path.exists("qwerty.json")
    phone_book = json.load(open("qwerty.json", "r"), object_pairs_hook=OrderedDict)
else:
    phone_book = OrderedDict({})

command = ""
while command != 'exit':
    command = input('Enter a command(options: create,read,save): ')
    if command == "create":
        ...

    elif command == 'read':
        ...

    elif command == 'save':
        json.dump(phone_book, open('qwerty.json', "w"))

阅读时,您必须做出一些更改:

elif command == 'read':
    z = json.load(open("C:\\Users\\qwerty.txt", "r"), object_pairs_hook=OrderedDict)
    ...

按照存储密钥的顺序加载dict。您现在可以致电list(z.items())[-20:]以仅获取最后20个项目。此外,在阅读特定键时,您会更新其最后读取时间"删除并重新创建它:

import copy
key = ...
temp = copy.copy(z[key])
del z[key]
z[key] = temp

这将更新dict中key的位置。这应该足以让你自己实现其余部分。