从 StringIO 读取而不重置位置
Reading from StringIO without resetting position
我有一个测试代码如下:
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(或类似的解决方案)以与文件相同的方式读取字符串。我的意思是每次阅读都没有重置位置。
你构造一个StringIO
对象两次,等于打开同一个文件两次。将对象分配给例如f
并调用 f.read()
两次。
正如@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'
我有一个测试代码如下:
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(或类似的解决方案)以与文件相同的方式读取字符串。我的意思是每次阅读都没有重置位置。
你构造一个StringIO
对象两次,等于打开同一个文件两次。将对象分配给例如f
并调用 f.read()
两次。
正如@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'