Пока я делаю file.read (1), есть ли способ вернуться назад на 1 байт? - PullRequest
0 голосов
/ 24 февраля 2019

Мне нужно читать один файл по буквам, но иногда мне приходится возвращаться назад (чтобы прочитать то, что я уже прочитал).

Есть ли способ сделать это?

Или как увидеть следующий байт без пересылки файла на следующую позицию?

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Я только что нашел решение, используя file.seek (file.tell () - 1), поэтому он возвращается, если мне нужно, чтобы поблагодарить всех за помощь и время.

0 голосов
/ 24 февраля 2019

Во-первых, я поставлю под сомнение вашу веру в то, что вам действительно нужно это сделать.

with open("babar.txt", 'rb') as file:
    text = file.read()
print(text[42])

Затем, каков реальный способ сделать это:

with open("babar.txt", 'rb') as file:
    file.seek(42)
    print(file.read(1))

Первые загрузкивсе в ОЗУ, и (если ваш файл помещается в ОЗУ) это невероятно быстро.Второй путь невероятно медленный.

Чтобы вернуться на один байт, вы можете сделать следующее:

with open("babar.txt", 'rb') as file:
    file.seek(42)
    print(file.read(1))
    file.seek(-1, 1) # goes back by one relative to current position
    print(file.read(1)) # reeds the same char
    file.seek(-1, 2) # goes at the end of the file
    print(file.read(1)) # reads the last char

Проверить аргумент whence seek().

Как правило, можно предположить, что доступ к ОЗУ в 1000 раз быстрее, чем доступ к жесткому диску, поэтому это, вероятно, в 1000 раз медленнее, чем первый вариант.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...