#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()
.