【发布时间】:2020-07-07 13:26:18
【问题描述】:
我正在用 python 练习文件读取。我有一个文本文件,我想运行一个程序,它不断读取这个文本文件并将新写入的行附加到一个列表中。要退出程序并打印出结果列表,用户应按“enter”。
到目前为止我写的代码是这样的:
import sys, select, os
data = []
i = 0
while True:
os.system('cls' if os.name == 'nt' else 'clear')
with open('test.txt', 'r') as f:
for line in f:
data.append(int(line))
print(data)
if sys.stdin in select.select([sys.stdin], [], [], 0)[0]:
line_ = input()
break
所以要跳出while循环,应该按下“enter”。公平地说,我只是从这里复制粘贴了解决方案:Exiting while loop by pressing enter without blocking. How can I improve this method?
但这段代码只是一次又一次地将所有行添加到我的列表中。 所以,假设我的文本文件包含以下行:
1
2
3
所以我的列表看起来像data = [1,2,3,1,2,3,1,2,3...] 并且有一定的长度,直到我按下回车键。当我添加一行(例如4)时,它将变为data = [1,2,3,1,2,3,1,2,3,1,2,3,4,1,2,3,4...]。
所以我在我的append 命令之前寻找某种if statement,以便只附加新写入的行。但我想不出容易的事情。
我已经得到了一些提示,即
- 不断检查文件大小,只读取新旧大小之间的部分。
- 跟踪行号并跳到下一次迭代中未附加的行。
目前,我想不出如何做到这一点。我尝试摆弄enumerate(f) 和itertools.islice,但无法使其工作。希望能得到一些帮助,因为我还没有采用程序员的思维方式。
【问题讨论】: