如何在不更新光标的情况下读取文件?

时间:2018-11-08 19:09:19

标签: python

我有一个简单的python文件:f = open('example.txt, 'r')

如何在不更新光标的情况下读取它:

示例:f contents '1234'

给出以下脚本:

print f.read(1)
print f.read(1)

它将打印:12。如何使它打印11

2 个答案:

答案 0 :(得分:2)

您可以使用f.seek(0)

演示:

>>> from io import StringIO
>>> s = StringIO('1234')
>>> s.read(1)
>>> '1'
>>> s.seek(0)
>>> 0
>>> s.read(1)
>>> '1'
  

如果我只想重置某些读物,该怎么办?

我不确定您要问什么。

您可以使用s.tell()获取当前位置,因此s.seek(s.tell() - 1)
可以这么说,“重置一个read(1)”。

>>> s = StringIO('1234')
>>> s.read(1)
>>> '1'
>>> s.read(1)
>>> '2'
>>> s.read(1)
>>> '3'
>>> s.seek(s.tell() - 1)
>>> 2
>>> s.read(1)
>>> '3'
  

我想要读取一个函数(文件,计数,modify_cursor = False)

>>> s = StringIO('abcdefghijk')
>>> 
>>> def read(file, count, modify_cursor=False):
...:    here = file.tell()
...:    content = file.read(count)
...:    if not modify_cursor:
...:        file.seek(here)
...:    return content
...:
>>> read(s, 3)
>>> 'abc'
>>> read(s, 3)
>>> 'abc'
>>> read(s, 3, modify_cursor=True)
>>> 'abc'
>>> read(s, 1)
>>> 'd'
>>> read(s, 1000)
>>> 'defghijk'
>>> read(s, 1)
>>> 'd'

答案 1 :(得分:1)

你可以

from io import StringIO
s = StringIO('read me out')
s.read(5)
# → 'read '
savedpos = s.tell()
s.read(2)
# → 'me'
s.seek(savedpos)

随时保存当前位置,然后根据需要将其恢复。

要明确显示在seek()上,在二进制文件流的二进制模式下,定义范围内的所有值均被允许,而在文本模式下,仅允许0和前一个tell()返回的任何值允许通话。