感谢您抽出时间来关注这个问题!
我正在创建一个Python脚本运行在树莓派Zero上。它的想法是,它将滚动一个非常长的文本(指环王三部曲),一次一行,在一个附加的屏幕上无限循环。
我已经使用以下代码和一个示例文本使循环工作。然而,我对Python使用内存的方式并不是很熟悉。当生成和打印每一行时,这种方法是否会继续占用越来越多的内存(或者,换句话说,这最终会冻结吗)?
import time
import tkinter as tk
book = open('ave.txt', 'r')
lines = book.readlines()
position = 0
class Example(tk.Frame):
def __init__(self, *args, **kwargs):
tk.Frame.__init__(self, *args, **kwargs)
self.text = tk.Text(self, height=6, width=40)
self.text.pack(side="left", fill="both", expand=True)
self.readbook()
def readbook(self):
global position
self.text.insert("end", lines[position])
self.text.see("end")
position += 1
self.after(1000, self.checkloop)
def checkloop(self):
global position
if position == 6:
position = 0
self.text.insert("end", '\n' + '\n')
self.readbook()
else:
self.readbook()
if __name__ == "__main__":
root =tk.Tk()
frame = Example(root)
frame.pack(fill="both", expand=True)
root.mainloop()(感谢Bryan Oakley,他在https://stackoverflow.com/a/30671211/15277790上的回答为这个实现提供了框架)
发布于 2021-02-25 22:40:03
这里有很多没有解决的复杂性。假设你有512mb,我不这么认为。聚合文档的大小是多少?readlines()的文档指出,它将整个文档加载到内存中(该文档已经在内存中打开,因此是一个副本),将每一行解析为一个字符串,并将其存储在一个数组中。如果整个文档大小为25mb,则应该很好。您总是可以使用下面的命令遍历这些行
with open('lor.txt') as f:
while True:
line = f.readline()
if not line:
break
pass这样就不会一次将整个文档重新加载到内存中。
https://stackoverflow.com/questions/66370390
复制相似问题