Python 更改读取文件的方向?
我有一个adafruit LCD屏幕,希望按钮能够从文本文件向下和向上导航到文本 我花了一整天的时间试图解决这个问题 到目前为止,我有:Python 更改读取文件的方向?,python,file,python-2.7,Python,File,Python 2.7,我有一个adafruit LCD屏幕,希望按钮能够从文本文件向下和向上导航到文本 我花了一整天的时间试图解决这个问题 到目前为止,我有: if lcd.is_pressed(LCD.UP): lcd.clear() text = txt.readline() lcd.message(("%s") % text) print "%s" % text time.sleep (0.5) elif lcd.is_pressed(LCD.DOWN): lcd
if lcd.is_pressed(LCD.UP):
lcd.clear()
text = txt.readline()
lcd.message(("%s") % text)
print "%s" % text
time.sleep (0.5)
elif lcd.is_pressed(LCD.DOWN):
lcd.clear()
# this is where I need help can you do read line last or somthing
text = txt.readline()
lcd.message(("%s") % text)
print "%s" % text
time.sleep (0.5)
我拥有驱动LCD工作的所有位,但只能沿着文件运行。您可以将整个文件作为行数组加载到内存中,并使用指针(一个整数,最初为0)。每次按下按钮时,递增/递减指针并显示相应的行
如果文件太大,无法立即在内存中加载,则只需记录最后N个文件指针位置(使用
txt.tell()
)。按下后退按钮后,将指针重置到所需位置(使用txt.seek()
)并读取该行。按下“前进”按钮时,正常读取该行并记录指针位置。您可以将整个文件作为行数组加载到内存中,并使用指针(一个整数,最初为0)。每次按下按钮时,递增/递减指针并显示相应的行
如果文件太大,无法立即在内存中加载,则只需记录最后N个文件指针位置(使用
txt.tell()
)。按下后退按钮后,将指针重置到所需位置(使用txt.seek()
)并读取该行。按下“前进”按钮时,正常读取行并记录指针位置。如果文本文件不是太大而无法放入内存,最简单的方法是将整个文件读取到列表中(我假设txt
是您打开的文件参考):
现在,text[0]
将是您文件的第一行,text[1]
将是第二行,等等。您可以将一个变量(我们称之为line
)设置为0,然后根据按下的按钮增加或减少该值,并且每次都使用
lcd.message(("%s") % text[line])
如果文本文件不太大,无法放入内存,那么最简单的方法是将整个文件读入列表(我假设
txt
是打开的文件引用):
现在,text[0]
将是您文件的第一行,text[1]
将是第二行,等等。您可以将一个变量(我们称之为line
)设置为0,然后根据按下的按钮增加或减少该值,并且每次都使用
lcd.message(("%s") % text[line])
Python提供了支持友好回溯的内置功能,但它可以很好地处理大多数文本文件。它区分了将所有行读取到内存和实时读取文件之间的区别,其设计基本上非常适合您正在考虑的场景(在相邻行之间移动,有助于缓存)
Python提供了支持友好回溯的内置功能,但它可以很好地处理大多数文本文件。它区分了将所有行读取到内存和实时读取文件之间的区别,其设计基本上非常适合您正在考虑的场景(在相邻行之间移动,有助于缓存)
import linecache
...
lineno = 0
txtfilename = '...'
...
if lcd.is_pressed(LCD.UP) or lcd.is_pressed(LCD.DOWN):
lineno += 1 if lcd.is_pressed(LCD.UP) else -1 # These numbers match the behavior in your example, but I think you may want to reverse them, so UP goes up one line...
lcd.clear()
text = linecache.getline(txtfilename, lineno)
lcd.message(("%s") % text)
print "%s" % text
time.sleep (0.5)