🐍 Укус питона 🐍
3.1K subscribers
475 photos
2 videos
251 links
🐍 Канал о программировании на языке Python. Тематические уроки и лайфхаки.

👽 Админ - @it_dashka
🔊 Купить рекламу: https://telega.in/c/byteofpython

👉 Чат: @abyteofpython
👉 Поделиться с друзьями: @byteofpython
Download Telegram
Файлы CSV. Продолжение.

При открытии файла на запись в качестве третьего параметра указывается значение newline="" - пустая строка позволяет корректно считывать строки из файла вне зависимости от операционной системы.

Для записи нам надо получить объект writer, который возвращается функцией csv.writer(file). В эту функцию передается открытый файл. А собственно запись производится с помощью метода writer.writerows(users) Этот метод принимает набор строк. В нашем случае это двухмерный список.

Если необходимо добавить одну запись, которая представляет собой одномерный список, например, ["Sam", 31], то в этом случае можно вызвать метод writer.writerow(user)

В итоге после выполнения скрипта в той же папке окажется файл users.csv, который будет иметь следующее содержимое:

🐍 Укус питона // 💬 Чат // #теория #файлы #CSV
Файлы CSV. Продолжение.

Для чтения из файла нам наоборот нужно создать объект reader:

При получении объекта reader мы можем в цикле перебрать все его строки, смотрим вторую часть примера:

🐍 Укус питона // 💬 Чат // #теория #файлы #CSV
Работа со словарями.

В примере выше каждая запись или строка представляла собой отдельный список, например, ["Sam", 31]. Но кроме того, модуль csv имеет специальные дополнительные возможности для работы со словарями. В частности, функция csv.DictWriter() возвращает объект writer, который позволяет записывать в файл. А функция csv.DictReader() возвращает объект reader для чтения из файла. Например:

Запись строк также производится с помощью методов writerow() и writerows(). Но теперь каждая строка представляет собой отдельный словарь, и кроме того, производится запись и заголовков столбцов с помощью метода writeheader(), а в метод csv.DictWriter в качестве второго параметра передается набор столбцов.

При чтении строк, используя названия столбцов, мы можем обратиться к отдельным значениям внутри строки: row["name"].

🐍 Укус питона // 💬 Чат // #теория #файлы #CSV
Бинарные файлы.

Бинарные файлы в отличие от текстовых хранят информацию в виде набора байт. При открытии бинарного файла на чтение или запись также надо учитывать, что нам нужно применять режим "b" в дополнение к режиму записи ("w") или чтения ("r").

При чтении мы получаем файл в виде набора байт, и наоборот, при записи в метод write() передается набор байт. Например, скопируем файл:

Считывает файл, путь к которому хранится в переменной FILENAME. В данном случае это файл изображения "forest.png". Считанные байты помещаются в список image_data. Затем этот список записываем в файл с именем NEWFILENAME. Таким образом, мы скопируем содержимое одного файла в другой.

🐍 Укус питона // 💬 Чат // #теория #файлы #бинарные
Модуль pickle.

Также для работы с бинарными файлами Python предоставляет специальный встроенный модуль pickle, который упрощает работу с бинарными файлами. Этот модуль предоставляет два метода:
• dump(obj, file): записывает объект obj в бинарный файл file
• load(file): считывает данные из бинарного файла в объект
Допустим, надо надо сохранить значения двух переменных:

🐍 Укус питона // 💬 Чат // #теория #файлы #бинарные
Модуль pickle. Продолжение.

С помощью функции dump последовательно записываются два объекта. Поэтому при чтении файла также последовательно посредством функции load мы можем считать эти объекты. Консольный вывод программы:

В зависимости от того, какой объект мы записывали функцией dump, тот же объект будет возвращен функцией load при считывании файла.

🐍 Укус питона // 💬 Чат // #теория #файлы #бинарные
Модуль shelve.

Для работы с бинарными файлами в Python может применяться еще один модуль - shelve. Он сохраняет объекты в файл с определенным ключом. Затем по этому ключу может извлечь ранее сохраненный объект из файла. Процесс работы с данными через модуль shelve напоминает работу со словарями, которые также используют ключи для сохранения и извлечения объектов.

Для открытия файла модуль shelve использует функцию open():

Где параметр flag может принимать значения, смотрим в пример:

🐍 Укус питона // 💬 Чат // #теория #файлы #бинарные
Модуль shelve. Продолжение.

Для закрытия подключения к файлу вызывается метод close():

Либо можно открывать файл с помощью оператора with. Сохраним и считаем в файл несколько объектов:

🐍 Укус питона // 💬 Чат // #теория #модули #shelve
Модуль shelve. Продолжение.

Запись данных предполагает установку значения для определенного ключа:

А чтение из файла эквивалентно получению значения по ключу:

🐍 Укус питона // 💬 Чат // #теория #модули #shelve
Чтение данных.

При чтении данных, если запрашиваемый ключ отсутствует, то генерируется исключение. В этом случае перед получением мы можем проверять на наличие ключа с помощью оператора in:

Также мы можем использовать метод get(). Первый параметр метода - ключ, по которому следует получить значение, а второй - значение по умолчанию, которое возвращается, если ключ не найден.

Используя цикл for, можно перебрать все значения из файла:

🐍 Укус питона // 💬 Чат // #теория #модули #shelve