2015-09-25 50 views
1

我有一個adafruit液晶屏,並希望按鈕能夠從文本文件中向下和向上導航文本。改變閱讀文件的方向?

我花了整整一天的時間來解決這個問題。

到目前爲止,我有這樣的:

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工作,但只能去下文件。

回答

2

Python提供了linecache module,它內置了啓用友好回溯的功能,對於大多數文本文件都可以正常工作。它分開了將所有行讀入內存和實時讀取文件的區別,它的設計基本上適用於您正在考慮的場景(在相鄰線之間移動,幫助緩存)。

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) 
+0

Python和它包含的電池總是會創造奇蹟。 – Tibo

2

您可以將整個文件作爲一行數組加載到內存中,並使用一個指針(一個整數,最初爲0)。每按一次按鈕,增加/減少指針並顯示相應的行。

如果文件太大而無法一次加載到內存中,則可以簡單地記錄最後的N文件指針位置(使用txt.tell())。當後退按鈕被按下時,將指針重置到所需的位置(使用txt.seek())並讀取該行。按下前進按鈕時,正常讀取該行並記錄指針位置。

0

如果文本文件是不是太大,不適合在內存中,最簡單的方式做這將是讀取整個文件到列表中(我假設txt是打開的文件引用):

text = txt.readlines() 

現在text[0]將成爲你文件的第一行,text[1]第二行等。你可以設置一個變量,我們稱之爲line,爲0,然後根據按下的按鈕增加或減少值,並且每次發送與LCD的正確線路

lcd.message(("%s") % text[line])