Как прочитать определенную часть большого файла в Python

Учитывая большой файл (сотни МБ), как я могу использовать Python для быстрого чтения содержимого между конкретным индексом начала и конца в файле?

По сути, я ищу более эффективный способ:

open(filename).read()[start_index:end_index]

Ответ 1

Вы можете seek добавить в файл файл, а затем прочитать определенную сумму оттуда. Seek позволяет вам получить определенное смещение внутри файла, а затем вы можете ограничить чтение только количеством байтов в этом диапазоне.

with open(filename) as fin:
    fin.seek(start_index)
    data = fin.read(end_index - start_index)

Это будет читать только те данные, которые вы ищете.

Ответ 2

Это мое решение с кодированием переменной ширины. Мой CSV файл содержит словарь, в котором каждая строка является новым элементом.

def get_stuff(filename, count, start_index):
    with open(filename, 'r') as infile:
             reader = csv.reader(infile)
             num = 0 
             for idx, row in enumerate(reader):
                 if idx >= start_index-1:
                     if num >= count:
                         return
                 else:
                     yield row 
                     num += 1