Connect with us

Обучение

Python #8: Кодировки, строки байт, pickle, json

194

 

Разбираем нюансы работы с файлами и их кодировками в питоне

Функция Open. Работа с файлами

Функция Open позволяет открывать файлы в нескольких режимах. Основные её параметры это имя файла, режим открытия и кодировка. Режимы открытия (mode) бывают разные, но в основном это:

r — чтение

w — запись файла. Если его нет, то он создается

x — запись файла. Если его нет, выдаст ошибку

а — дозапись

b — двоичный режим

+ — открытие на запись и чтение

Записывается это так:

 

Результатом выполнения будет созданный файл file.py:

Запись текста в файл

Для этого можно использовать либо write (запись одной строки), либо writeline (запись списка строк в файл). Строки при использовании райтлайн не переносятся, поэтому необходимо ставить знак переноса (конца) строки — /n

[adace-ad id=»3482″]

 

 

Результат:

Чтение из файла

Чтобы прочитать содержимое файла используют три метода:

read — чтение всего файла

for line in f — цикл, который читает файл построчно

readlines — чтение файла в список строк

Каждый из них можно использовать:

Закрытие файла

Если мы открываем и редактируем файл, то его нужно будет закрывать, т.к. много открытых файлов будут быстро сжирать ресурсы системы. Можно вызвать метод close:

f.close()

Но такой метод не очень удобен тем, что про него нельзя забывать. В питоне, вместо close, принято использовать конструкцию with. Не забывайте, что если вы открываете файл для чтения, то используйте метод read в выводе, иначе будет ошибка: io.UnsupportedOperation: not readable. Полностью with выглядит следующим образом:

[adace-ad id=»3470″]

 

В этой конструкции файл закрывается автоматически, когда команда выходит из конструкции with

Строки байт

Как мы уже знаем, обычная строка в питоне — это str. Но есть в нём и так называемые строки байт, которые обозначаются как bytes, есть еще и изменяемая строка байт — bytearray. Создается строка байт почти так же, как и обычная строчка, только вперед строки мы ставим символ b

У строк байт можно получить индекс [0] или срез [:3]. Только различие в том, что если мы берем какой-либо элемент у обычной (str) строчки, то это будет символ. Если мы берем индекс у строки байт (bytes), то это будет не сам символ, а его код. Что касается среза, то тут строка байт тоже выведет символы, но с обязательным b в начале, показывая, что это на самом деле строка байт

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

Строку байт можно перебрать циклом for, как и обычную строку — результатом будет все коды элементов, которые в ней содержатся

Кодировки

Любая информация  — это набор нулей и единиц. Так же любому символу в строке соответствует какой-либо код. Перевод строки в байт называется кодированием. В мире питона используется несколько основных кодировок:

[adace-ad id=»3474″]

 

ASCII — только американские символы

latin-1 — европейские символы

utf-8 — универсальная кодировка

При переводе из str в bytes — всегда указываем кодировку. Кодировка должна поддерживать символы нашего алфавита. Например, если у нас строка содержит русские символы, вроде «Привет, мир», то нужно использовать кодировку utf-8

Результат:

Декодирование

Перевод из строки байт в обычную строку называется декодированием. Обязательно указываем ту же самую кодировку, в которую кодировали эту строку изначально! Немного дополним наш прошлый код:

Результат:

Запись и чтение байт

Конструкции чтения и записи байт строк отличаются от обычных только наличием b в параметрах. Так же имеется еще один параметр — encoding. Он определяет кодировку. Т.е. мы можем просто открыть строку байт. Или же можем запустить текстовый вариант, но тогда необходимо указать кодировку:

Теперь давайте запишем в наш файл байты. Делается это через write, но добавляем символ b

Результат:

Чтение байтов у нас происходит, если файл открыт для чтения байтов (rb). Если он открыт в «простом» режиме чтения (r), то мы будем «читать» строки. Необходимо запомнить, что когда мы пишем обычную строку — в памяти это всё равно хранится в виде байтов.

Модуль Pickle

Модуль представляет собой один из удобных способов записи объекта (например, словарь (dict)) в файл или базу данных, чтобы потом (возможно) его можно было передать по сети. Здесь следует уточнить, что есть и ручной способ перевода объектов в байты, но он достаточно громоздкий и неудобный — если мы изменим какой-либо элемент объекта, придется переписывать условие алгоритма. Поэтому сразу перейдем к модулю Pickle (это встроенный модуль в питоне). Две основных области его применения — это сохранение объектов в файл и преобразование этих объектов в байты. Основные функции:

dump — сохранения объекта в файл

dumps — преобразование объекта в файл

load — загрузка объекта из файла

loads — загрузка объекта из набора байт

Перед тем, как использовать Pickle нужно его импортировать, уже известной нам командой,  import

В самом файле file.py при этом будет набор символов:

Чтобы прочитать такой файл, который записал модуль pickle, необходимо использовать функцию load:

Результат:

Плюсом использования Pickle является то, что мы можем теперь изменять первоначальный объект (например, добавлять ключ:значение в словарь) и при этом остальной код чтения и записи у нас останется неизменным

Модуль json

JSON (JavaScript Object Notation) — это текстовый формат обмена данными из языка JavaScript. Тип данных у json будет всегда строка (str). Используется для хранения и передачи данных в веб-разработке, по протоколу http. Основные функции:

dump — сохранение объекта в файл в формате json

dumps — преобразование объекта в json (текст)

load — загрузка объекта из файла

loads — загрузка объекта из формата json

Для использования json в питоне необходимо преобразовать объекты в строку и обратно. Это тоже встроенный модуль (как и pickle), поэтому вызывается командой import.

Результат:

Для того, чтобы сделать преобразование объекта из json в первоначальный вид необходимо использовать функцию loads

Запись формата json в файл

Делаем по аналогии с модулем pickle

Посмотрим файл file.py — там будет наш список в виде текста:

Когда мы открываем файл на запись, чтобы записать объект в json можно, в качестве третьего параметра, указывать кодировку (encoding =’utf-8′), если в нашем объекте (список, словарь и т.д.) имеются русские символы

Нажмите что бы оставить комментарий

Ответить

Ваш e-mail не будет опубликован.

Лучшие сервисы стриминга музыки в 2019 году

Сервисы

Телевидение Wink Ростелеком: Samsung LG, Sony, Phillips, Android TV

Ростелеком

Ноутбуки Asus не видят жесткий диск. Автоматический вход в BIOS при старте

Гаджеты

LG WEB OS: приложения, обновления, настройка, проблемы со звуком

Гаджеты

.

Digital2.ru - Тренды, IT, WEB- разработка, Цифровая экономика
Свободное копирование и распространение материалов с сайта Digital2.ru
разрешено только с указанием активной ссылки на Digital2 как на источник.
Данный сайт в ходит структуру медиа группы: Online Payments Group Intellect Organic
Товарный знак: OPGIO
Copyright 2019 © All rights reserved

Connect
Подпишись на нас