gpt4 book ai didi

python - BytesIO 类文件对象

转载 作者:太空宇宙 更新时间:2023-11-04 04:25:35 24 4
gpt4 key购买 nike

我无法理解这两个 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 应该像对象一样充当文件,但存储在内存中。那么,为什么当我尝试只传递一行文件时,这个循环什么都不返回,就像文件中没有行一样?

最佳答案

区别在于流中的当前位置。在第一个示例中,位置在开头。但是在第二个例子中,它在最后。您可以使用 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)

关于python - BytesIO 类文件对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53575369/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com