缓存的初始大小为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()
答案 0 :(得分:1)
使用json
和collections.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
的位置。这应该足以让你自己实现其余部分。