Простейший (python 2.6 или лучше):
import array
idlist = array.array('l')
with open(filename, "rb") as f:
while True:
try: idlist.fromfile(f, 2000)
except EOFError: break
idtuple = tuple(idlist)
Кортежи являются неизменяемыми, поэтому они не могут быть построены поэтапно: поэтому вам нужно создать другую (изменяемую) последовательность, а затем вызвать tuple
в конце. Если вам на самом деле не нужен , в частности, кортеж, конечно, вы можете сохранить последний, дорогостоящий шаг и сохранить массив или список или что-то еще. Во всяком случае, рекомендуется избегать попрания встроенных имен, таких как file
; -).
Если у вас есть для использования модуля struct
для задания, которое лучше всего обрабатывается модулем array
(например, из-за ставки),
idlist = [ ]
with open(filename, "rb") as f:
while True:
bytes_read = f.read(struct.calcsize("=l"))
if not bytes_read: break
oneid = struct.unpack("=l", bytes_read)[0]
idlist.append(oneid)
Инструкция with
(также доступная в версии 2.5 с формой импорта в будущем) лучше, чем старая попытка / наконец, в ясности и краткости.