Использование divmod
:
>>> divmod(5, 2)
(2, 1)
>>>
Это говорит о том, что 5, деленное на 2 - это 2, остаток 1, поэтому последний кусок будет 2 + 1 = 3.
>>> divmod(12345, 6)
(2057, 3)
Здесь у вас будет 5 блоков в 2057 году и последний кусок в 2057 + 3.
Этот алгоритм также будет работать для случаев, когда деление не имеет остатка:
>>> divmod(12345, 5)
(2469, 0)
Здесь у вас будет 4 фрагмента в 2469 плюс последний фрагмент в 2469 + 0.
Итак, размеры вашего чанка могут быть вычислены как:
def chunk_sizes(filesize, num_chunks):
d, r = divmod(filesize, num_chunks)
result = [d] * num_chunks
result[-1] += r
return result