Содержимое массива array.array()
может быть записано и прочитано из файлов с использованием встроенных методов.
Этот пример иллюстрирует чтение данных непосредственно из двоичного файла. Удобно то, что не нужно преобразовать прочитанные байты в соответствующие типы.
import array import binascii import tempfile a = array.array('i', range(5)) print('A1:', a) # Записать массив чисел во временный файл output = tempfile.NamedTemporaryFile() a.tofile(output.file) output.flush() # Чтение необработанных данных with open(output.name, 'rb') as input: raw_data = input.read() print('Raw Contents:', binascii.hexlify(raw_data)) # Считать данные в массив input.seek(0) a2 = array.array('i') a2.fromfile(input, len(a)) print('A2:', a2) # A1: array('i', [0, 1, 2, 3, 4]) # Raw Contents: b'0000000001000000020000000300000004000000' # A2: array('i', [0, 1, 2, 3, 4])
Метод array.tofile()
использует array.tobytes()
для форматирования данных, а метод array.fromfile()
использует array.frombytes()
для преобразования его обратно в экземпляр массива. И array.tobytes()
и array.frombytes()
работают со строками байтов, а не со строками Unicode.
import array import binascii a = array.array('i', range(5)) print('A1:', a) as_bytes = a.tobytes() print('Bytes:', binascii.hexlify(as_bytes)) a2 = array.array('i') a2.frombytes(as_bytes) print('A2:', a2) # A1: array('i', [0, 1, 2, 3, 4]) # Bytes: b'0000000001000000020000000300000004000000' # A2: array('i', [0, 1, 2, 3, 4])