Добавить в корзинуПозвонить
Найти в Дзене
Old Programmer

Работа с файлами Python. Статья 3 (бинарные файлы)

Мой канал о программировании Old Programmer, а здесь: Тематическое оглавление моего Zen-канала (Old Programmer). А тут материалы по Python. Сегодня рассматриваем файлы с бинарной точки зрения. Материалы по текстовым файлам: статья 1 и статья 2. Чтобы трактовать открываемые файлы как последовательность байтов необходимо, что бы в строке режима открытия присутствовала буква 'b', от слова binary. Эксперимент с бинарным файлом на языке Python Чтобы понять, как работать с файлами в бинарном формате проведем несколько экспериментов. Рассмотрим в начале файл, состоящий из текстовых строк и посмотрим результат чтения его в бинарном формате. Вот этот файл (file1) 1234
qwer
абсд Программа p400.py считывает файл в строку h и далее мы печатаем эту строку обычной функцией print(). В результате на консоль выводится следующее: b'1234\nqwer\n\xd0\xb0\xd0\xb1\xd1\x81\xd0\xb4\n\n' Префикс 'b' в начале означает, что последующую строку далее следует рассматривать с точки зрения бинарных данных. В сущнос
Оглавление

Мой канал о программировании Old Programmer, а здесь: Тематическое оглавление моего Zen-канала (Old Programmer). А тут материалы по Python.

  • Список разделов канала Old Programmer, канала о программировании и программистах

Сегодня рассматриваем файлы с бинарной точки зрения. Материалы по текстовым файлам: статья 1 и статья 2. Чтобы трактовать открываемые файлы как последовательность байтов необходимо, что бы в строке режима открытия присутствовала буква 'b', от слова binary.

Эксперимент с бинарным файлом на языке Python

Чтобы понять, как работать с файлами в бинарном формате проведем несколько экспериментов. Рассмотрим в начале файл, состоящий из текстовых строк и посмотрим результат чтения его в бинарном формате. Вот этот файл (file1)

1234
qwer
абсд

Программа p400.py считывает файл в строку h и далее мы печатаем эту строку обычной функцией print(). В результате на консоль выводится следующее:

b'1234\nqwer\n\xd0\xb0\xd0\xb1\xd1\x81\xd0\xb4\n\n'

Префикс 'b' в начале означает, что последующую строку далее следует рассматривать с точки зрения бинарных данных. В сущности это запись так называемого байтового массива, о котором речь пойдет далее. Структура строки довольно понятна:

  • '\n' - это символ перевода строки, в Linux это символ с кодом 10. В Windows вам встретится также символ '\r' код которого равен 13 и который тоже ставится в конце текстовой строки в такой последовательности \r\n.
  • '\x' - означает, что далее идут два символа, определяющие число в 16-м виде. Например \xd0. В нашем случае это коды символов кириллицы.
  • Ну и, наконец, одиночные символы - цифры и символы латиницы.

Представленные выше данные есть ни что иное, как массив байтов (bytes), к элементам которого можно обращаться по индексу. Ниже, в программе p400b.py мы используем его для преобразования списка чисел. В следующей статье мы вернемся к нему подробнее.

Файл, как числовой список в языке Python

Теперь посмотрим, как можно получить содержимое файла в виду массива чисел (p400a.py).

Результат выполнения программы p400a.py:

49 50 51 52 10 113 119 101 114 10 208 176 208 177 209 129 208 180 10 10

Т.е. мы получили просто последовательность байтов некоторого файла. Обращаю внимание на код 10, который попадается в последовательности. Это как раз символ перехода на новую строку.

Обратно к текстовому файлу на языке Python

Ну и последнее, что хотелось бы сегодня рассказать о бинарных файлах (а это не последний урок), как полученную последовательность чисел опять превратить в файл. Смотрим программу p400b.py.

За исходную последовательность чисел мы взяли как раз последовательность полученную в программе p400b.py. В результате работы мы получим снова файл, содержащий строки

1234
qwer
абсд

т.е. копию первоначального файла. Обращаю внимание на массив bytes, который использовался нами для записи в файл.

На сегодня о бинарных файлах все. Но продолжение следует. Следующая статья здесь.

Пока! Программируем на Python и подписываемся на мой канал Old Programmer.

Фрагмент программы p400b.py
Фрагмент программы p400b.py