首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >改变读取文件的方向?

改变读取文件的方向?
EN

Stack Overflow用户
提问于 2015-09-25 21:47:25
回答 3查看 241关注 0票数 1

我有一个adafruit液晶屏幕,并希望按钮能够导航下行和向上的文字从一个文本文件。

我花了一整天的时间来解决这个问题。

到目前为止,我有这样一个:

代码语言:javascript
运行
复制
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)

我有所有的位驱动液晶显示工作,但只能向下文件。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-26 02:10:54

Python提供了 module,虽然内置它是为了支持友好的回溯,但它可以很好地处理大多数文本文件。它将将所有行读入内存和实时读取文件之间的区别分开,它的设计基本上适合您正在考虑的场景(在相邻行之间移动,帮助缓存)。

代码语言:javascript
运行
复制
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)
票数 2
EN

Stack Overflow用户

发布于 2015-09-25 22:33:13

您可以将整个文件作为一行数组加载到内存中,并使用指针(整数,最初为0)。每次按下按钮时,增加/减少指针,并显示相应的行。

如果文件太大,无法一次在内存中加载,则只需记录最后的N个文件指针位置(使用txt.tell())。当按下“后退”按钮时,将指针重置到所需的位置(使用txt.seek())并读取该行。当按下前向按钮时,请正常读取直线并记录指针位置。

票数 2
EN

Stack Overflow用户

发布于 2015-09-25 22:34:17

如果文本文件的大小不足以容纳内存,最简单的方法是将整个文件读入列表(我假设txt是打开的文件引用):

代码语言:javascript
运行
复制
text = txt.readlines()

现在text[0]将是您文件的第一行,text[1]是第二行等等。您可以将变量设置为0,我们将其称为line,然后根据按下的按钮增加或减少值,每次将正确的行发送到LCD

代码语言:javascript
运行
复制
lcd.message(("%s") % text[line])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32791111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档