从StringIO读取而不重置位置

问题描述 投票:1回答:2

我有一个测试代码,包含以下内容:

with open('master.log') as f:
    print(f.read(8))
    print(f.read(8))

这打印为:

>> pi@raspberrypi:~/workspace/Program $ sudo python test.py
>> 12/29/20
>> 17 12:52

如您所见,这有不同的打印效果。但是,当我这样做时:

import cStringIO

stream= "1234567890"
print(cStringIO.StringIO(stream).read(8))
print(cStringIO.StringIO(stream).read(8))

当我运行它时,我得到以下输出:

>> pi@raspberrypi:~/workspace/Program $ sudo python test.py
>> 12345678
>> 12345678

在这种情况下,它输出相同的值(导引头不前进)。

我需要这样做,所以cStringIO(或类似的解决方案)以与文件相同的方式读取字符串。我没有在每次读取时重置位置。

python stringio cstringio
2个回答
1
投票

正如@Michael Butscher和其他人所暗示的那样,你需要制作一个流的实例。

>>> #import io                                      # python 3
>>> import cStringIO as io                          # python 2 
>>> stream = "1234567890"
>>> f = io.StringIO(stream)
>>> f.read(8)
'12345678'
>>> f.read(8)
'90'

1
投票

你构造一个StringIO对象两次,这相当于打开两次相同的文件。将对象分配给例如fand两次打电话给f.read()

© www.soinside.com 2019 - 2024. All rights reserved.