类似BytesIO的文件对象



我无法理解这两个BytesIO对象的区别。如果我这样做:

f = open('decoder/logs/testfile.txt', 'rb')
file = io.BytesIO(f.read())
decode(file,0)

然后在解码方法中,这是有效的:

for line in islice(file, lines, None):

但如果我创建这样的字节跳动:

file = io.BytesIO()
file.write(b"Some codded message")
decode(file, 0)

然后解码方法中的循环不返回任何内容。我所理解的是BytesIO应该像文件一样充当对象,但存储在内存中。那么,为什么当我试图只传递文件的一行时,这个循环什么也不返回,就像文件中没有行一样?

区别在于流中的当前位置。在第一个示例中,位置位于开头。但在第二个例子中,它已经结束了。您可以使用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)
import io
from itertools import islice

def decode(file, lines):
for line in islice(file, lines, None):
print(line)
file = io.BytesIO()
file.write(b"Some codded message")
decode(file.getvalue(), 0)

decode(file.getvalue(), 0):

然后循环解码方法返回一些东西,不确定它是否是您所期望的

decode(file.getvalue().decode('UTF8'), 0)可能会更好,但不是完全的

相关内容

  • 没有找到相关文章

最新更新