我无法理解这两个BytesIO对象的区别。 如果我这样做:
f = open('decoder/logs/testfile.txt', 'rb')
file = io.BytesIO(f.read())
decode(file,0)
然后在解码方法中起作用:
for line in islice(file, lines, None):
但是如果我这样创建BytesIO:
file = io.BytesIO()
file.write(b"Some codded message")
decode(file, 0)
然后,decode方法中的循环不返回任何内容。 我了解的是BytesIO应该像文件一样充当对象,但存储在内存中。那么,为什么当我尝试仅传递文件的一行时,此循环不返回文件中没有行的内容?
答案 0 :(得分:1)
差异是流中的当前位置。在第一个示例中,位置在开头。但是在第二个示例中,它已经结束了。您可以使用file.tell()
获取当前位置,并通过file.seek(0)
返回起点:
import io
from itertools import islice
def decode(file, lines):
for line in islice(file, lines, None):
print(line)
f = open('testfile.txt', 'rb')
file = io.BytesIO(f.read())
print(file.tell()) # The position is 0
decode(file, 0)
file = io.BytesIO()
file.write(b"Some codded message")
print(file.tell()) # The position is 19
decode(file, 0)
file = io.BytesIO()
file.write(b"Some codded message")
file.seek(0)
print(file.tell()) # The position is 0
decode(file, 0)