我不明白这两个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)
然后在解码方法中循环不返回任何内容。据我所知,BytesIO应该像文件一样充当对象,但存储在内存中。那么,为什么当我试图只传递一行文件时,这个循环不像文件中没有一行那样返回任何东西?
发布于 2018-12-01 22:06:48
不同之处是流中的当前位置。在第一个例子中,位置在开头。但在第二个例子中,它是在最后。您可以使用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)
发布于 2022-04-07 13:33:26
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)
可能会变得更好,但不是很好
https://stackoverflow.com/questions/53575369
复制相似问题