Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 更改读取文件的方向?_Python_File_Python 2.7 - Fatal编程技术网

Python 更改读取文件的方向?

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

我有一个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.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)