Какова наилучшая структура данных для хранения фрагментов файла в python

#python

#python

Вопрос:

Я хочу сохранить фрагменты файла в списке, чтобы позже a мог выполнять некоторые операции с функцией map для каждого фрагмента. Интуитивно я испытываю соблазн сделать что-то вроде приведенного ниже (но это не работает):

 fi = open(fileName, "rb")
data = fi.read()
fi.close()

max = len(data)
block = 1024

tmp = []
for i in range(0, max, block):
    tmp.append(data[i:i block])
  

Комментарии:

1. Избегайте использования max в качестве имени переменной — это затеняет встроенную функцию max() .

2. «это не работает». Можете ли вы уточнить, что не работает? Вызывает ли это ошибку? Дает ли это неожиданный результат (в данном случае показывает, каким будет ожидаемый результат и какой результат вы получите).

3. В большинстве случаев создание списка фрагментов может быть просто бесполезным использованием памяти, поскольку вы можете читать фрагмент файла за фрагментом. И в любом случае вам придется обрабатывать последний (неполный) фрагмент по-другому. Но, как указывает Бакурлу в своем ответе, функция file.read() принимает размер фрагмента в качестве параметра. Если для чтения требуется меньше октетов, read() возвращает столько, сколько может.

Ответ №1:

Я бы посоветовал сначала прочитать файл по фрагментам:

 block = 1024
with open(fileName, 'rb') as f:
    tmp = [chunk for chunk in iter(lambda: f.read(block), b'')]
  

Смотрите Документацию для iter() .