我试图保留一个只有10个条目的文件。
每次我写一个新的,最旧的条目被最新的条目取代;所以总行数总是10。
文件示例:
abcde-12345
akmjk-13249
ofdsi-01230
faaoj-10293
famdk-05931
foajq-10592
xmdsj-19234
boxqa-12130
fdlsp-95392
paidf-19341
当我在这个文件中添加一个带有append命令的新行时,它会增加文件的总行数,所以每次添加一行时文件都会增长。目标是在底部附加行,删除文件的第一行,以便删除最旧的条目,并在底部添加新的条目,留下文件中的总行数,始终等于10。
我的方法是
-read the file
-save the last 9 lines in a new file
-add the 10th line, which is the new one
-delete the old file, and save the new file with the same name.
这具有繁琐,缓慢,无效的问题。在Shell脚本中,我可以轻松地完成它,但由于我使用python,我希望有一个更简单的方法来做到这一点
答案 0 :(得分:2)
使用deque
作为缓冲区,使用maxlen=10
,附加到双端队列,然后从双端队列中写入:
Juans-MBP:workspace juan$ cat 10lines.txt
first line
second line
third line
fourth line
fith line
sixth line
seventh line
eigth line
ninth line
tenth line
Juans-MBP:workspace juan$ python
Python 3.5.2 |Anaconda custom (x86_64)| (default, Jul 2 2016, 17:52:12)
[GCC 4.2.1 Compatible Apple LLVM 4.2 (clang-425.0.28)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from collections import deque
>>> with open('10lines.txt') as f:
... buffer = deque(f, maxlen=10)
...
>>> buffer.append('first new line\n')
>>> buffer.append('second new line\n')
>>> with open('10lines.txt', 'w') as f:
... f.writelines(buffer)
...
>>> exit()
Juans-MBP:workspace juan$ cat 10lines.txt
third line
fourth line
fith line
sixth line
seventh line
eigth line
ninth line
tenth line
first new line
second new line
Juans-MBP:workspace juan$
注意,您必须注意确保附加的行有newlines
,因为尽管名称可能暗示它,f.writelines
不会添加换行符。
答案 1 :(得分:0)
借用此答案How to delete the first line of a text file using Python?来读取和删除第一行,然后附加新行并将其写回文件。这是一个可能的Python2解决方案。
if (this.ignoreSelectedEvent) {
this.ignoreSelectedEvent = false;
return;
}
// Update the model with the string ID
this.onChange(val.id);