Альтернатива readline в Python - PullRequest
0 голосов
/ 29 ноября 2018

Какая лучшая альтернатива readline в Python?

Я хочу читать построчно похожий на файл объект.Этот файлоподобный объект содержит следующие методы:

  • read (): считывает байтовую строку из объектоподобного объекта с текущим смещением.
  • seek (): ищетсмещение внутри объектоподобного объекта.
  • get_offset (): извлекает текущее смещение в объектоподобный объект.
  • get_size (): извлекает размер объектоподобного объекта.

Я не могу прочитать полный текст для файла размером более 2 ГБ, поэтому я не могу сделать что-то подобное:

   for line in file_object.read():
      dostuff(line)

Я тестировал некоторые методы для чтения построчно: это хорошо с очень маленьким файлом, но с большим файлом это очень медленно.В любом случае они намного медленнее, чем File readline ().Вот пример, который я попробовал:

text = ''
while True:
  char = file_object.read(1)
  if char == '':
    return ''
  text += buffer + char
  if char == '\n':
    pos_newline = text.find('\n')
    current_offset += pos_newline + 1
    buffer = text[pos_newline + 1:]
    line = text[:pos_newline]
    return line

Я также пытался читать 10/50/100 символов одновременно.

Я могу использовать только стандартные библиотеки.

РЕДАКТИРОВАТЬ: "file-like" не повторяется.

1 Ответ

0 голосов
/ 29 ноября 2018

Вы можете читать кусками с помощью

while True:
    chunk = f.read(CHUNK_SIZE)
    if chunk == '':
        # we've reached the end
        break
    # process chunk

Но вполне вероятно, что любой имеющийся у вас файлоподобный объект может быть перебран напрямую для получения строк.

for line in f:
    # I don't have readline, but I work anyway hee hee!
...