BytesIO как объект файла - PullRequest
       10

BytesIO как объект файла

0 голосов
/ 02 декабря 2018

Я не могу понять разницу этих двух объектов 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 должен действовать как подобный объекту файл, но сохраненный в памяти.Так почему, когда я пытаюсь передать только одну строку файла, этот цикл ничего не возвращает, как будто в файле не было строк?

1 Ответ

0 голосов
/ 02 декабря 2018

Разница - это текущая позиция в потоке.В первом примере позиция находится в начале.Но во втором примере это в конце.Вы можете получить текущую позицию с помощью 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)
...