word = input("\nPlease enter the word you want to look up > ")
file = open("recents.txt", 'a')
file.write("\n" + word)
file.close()
对于我的词典程序,我有一个最近的搜索功能,截至目前,当你搜索一个单词时,它会在文件的新行中添加该单词。但你怎么做到这一点,所以你有10个最近的搜索,所以在第10行,它不再添加,并在第1行再次开始,取代旧的搜索?
答案 0 :(得分:0)
打开读/写(a +模式),然后读取整个文件(文件对象的行为类似于行数)然后保持最多9个([:9]切片)。
然后擦除整个文件内容(将光标放在搜索开始并截断其余部分)写回行(现在它们不包含第10行)(行已经包含\ n,所以用空字符串连接是正确的)最后写入当前字在文件的末尾。
with f as open("recents.txt", 'a+'):
lines = list(f)[:9] # store to max 9 lines
f.seek(0)
f.truncate()
f.write(''.join(lines)) # write it back
f.write(word + "\n")
答案 1 :(得分:0)
您可以使用内容列表并重写它们。此外,您应该使用Controller
打开文件:
with
或者您可以使用word = input("\nPlease enter the word you want to look up > ")
with open("recents.txt", 'r') as file:
contents = file.readlines()
if len(contents) == 10:
contents = contents[-1:] + contents[:-1]
contents[0] = word + "\n"
else:
contents.append("\n"+word)
with open("recents.txt", "w") as file:
for i in contents:
file.write(i)
将指针移动到列表的开头:
file.seek()
答案 2 :(得分:0)
如果您的字数仅限于一小部分,则可以使用pickle
来存储包含dict
和last insertion
字词的dict
对象。
在这种情况下,我需要存储5个字,并假设最后插入是在3个位置。您的dict
看起来像是:
import pickle
recent_dict = { "last_insertion":3, "word_dict" : {1 : "enormous", 2 : "erronous" , 3: "embarras", 4 : "paragmatic", 5: "benevolent"}}
with open("recents.word", 'wb') as f:
pickle.dump(recent_dict, f)
现在在添加新词时,请说temparate
:
n_word = "temperate"
recent_dict = pickle.load(open("temp.txt", 'rb'))
recent_dict["word_dict"][recent_dict["last_insertion"] + 1] = n_word
recent_dict["last_insertion"] = recent_dict["last_insertion"] + 1
# and then again dump this info through pickle
答案 3 :(得分:0)
标准库中的collections模块有一个deque容器。你有没有考虑过使用它?
示例代码:
from collections import deque
filename = "recents.txt"
maxlen = 9
try:
recents = deque((w.rstrip() for w in open(filename, 'r')), maxlen=maxlen)
except FileNotFoundError:
recents = deque(maxlen=maxlen)
recents.append(input("\nPlease enter the word you want to look up > "))
print(*recents, file=open(filename, 'w'), sep='\n’)
每次都会从头开始重写recents.txt
文件,如果只包含9个条目,这可能不是什么大问题。