Python - 写入文件中的特定行,然后从第1行开始

时间:2016-04-12 08:41:56

标签: python file

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行再次开始,取代旧的搜索?

4 个答案:

答案 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来存储包含dictlast 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个条目,这可能不是什么大问题。