首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >类BytesIO文件对象

类BytesIO文件对象
EN

Stack Overflow用户
提问于 2018-12-01 21:52:02
回答 2查看 7.4K关注 0票数 6

我不明白这两个BytesIO对象的区别。如果我这么做:

代码语言:javascript
运行
复制
f = open('decoder/logs/testfile.txt', 'rb')
file = io.BytesIO(f.read())
decode(file,0)

然后,在解码方法中,这起作用是:

代码语言:javascript
运行
复制
for line in islice(file, lines, None):

但是如果我像这样创建BytesIO:

代码语言:javascript
运行
复制
file = io.BytesIO()
file.write(b"Some codded message")
decode(file, 0)

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-01 22:06:48

不同之处是流中的当前位置。在第一个例子中,位置在开头。但在第二个例子中,它是在最后。您可以使用file.tell()获得当前位置,然后通过file.seek(0)返回到起始位置:

代码语言:javascript
运行
复制
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)
票数 8
EN

Stack Overflow用户

发布于 2022-04-07 13:33:26

代码语言:javascript
运行
复制
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)

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

decode(file.getvalue().decode('UTF8'), 0)可能会变得更好,但不是很好

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53575369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档