2619
🐍 Канал о программировании на языке Python. Тематические уроки и лайфхаки. 👽 Админ - @it_dashka 🔊 Купить рекламу: https://telega.in/c/byteofpython 👉 Чат: @abyteofpython 👉 Поделиться с друзьями: @byteofpython
Удаление данных
Для удаления с одновременным получением можно использовать функцию pop(), в которую передается ключ элемента и значение по умолчанию, если ключ не найден, первый пример:
Также для удаления может применяться оператор del, второй пример:
Для удаления всех элементов можно использовать метод clear(), последний пример:
🐍 Укус питона // 💬 Чат // #теория #модули #shelve
Чтение данных. Продолжение.
Метод keys() возвращает все ключи из файла, а метод values() - все значения:
Еще один метод items() возвращает набор кортежей. Каждый кортеж содержит ключ и значение.
Консольный вывод:
🐍 Укус питона // 💬 Чат // #теория #модули #shelve
Модуль shelve. Продолжение.
Запись данных предполагает установку значения для определенного ключа:
А чтение из файла эквивалентно получению значения по ключу:
🐍 Укус питона // 💬 Чат // #теория #модули #shelve
🔵 Практический интенсив «Python-разработчик: основы за 2 дня» — 23-24 апреля в 19:00 мск.
О перспективах направления Python и многом другом расскажет Грегори Салиба, старший разработчик ЭквантаЛаб с опытом в разработке более 3 лет.
На вебинаре вы:
☑️ Самостоятельно напишете Telegram-бота с карточными мини-играми.
☑️ Познакомитесь с синтаксисом языка и сферами его применения.
☑️ Узнаете, чего ждут работодатели от junior-разработчиков и что делать, чтобы найти работу без опыта.
Переходите по ссылке, чтобы зарегистрироваться на бесплатный практический интенсив и забрать подарки 🎁
Модуль pickle. Продолжение.
С помощью функции dump последовательно записываются два объекта. Поэтому при чтении файла также последовательно посредством функции load мы можем считать эти объекты. Консольный вывод программы:
В зависимости от того, какой объект мы записывали функцией dump, тот же объект будет возвращен функцией load при считывании файла.
🐍 Укус питона // 💬 Чат // #теория #файлы #бинарные
Бинарные файлы.
Бинарные файлы в отличие от текстовых хранят информацию в виде набора байт. При открытии бинарного файла на чтение или запись также надо учитывать, что нам нужно применять режим "b" в дополнение к режиму записи ("w") или чтения ("r").
При чтении мы получаем файл в виде набора байт, и наоборот, при записи в метод write() передается набор байт. Например, скопируем файл:
Считывает файл, путь к которому хранится в переменной FILENAME. В данном случае это файл изображения "forest.png". Считанные байты помещаются в список image_data. Затем этот список записываем в файл с именем NEWFILENAME. Таким образом, мы скопируем содержимое одного файла в другой.
🐍 Укус питона // 💬 Чат // #теория #файлы #бинарные
Файлы CSV. Продолжение.
Для чтения из файла нам наоборот нужно создать объект reader:
При получении объекта reader мы можем в цикле перебрать все его строки, смотрим вторую часть примера:
🐍 Укус питона // 💬 Чат // #теория #файлы #CSV
Файлы CSV
Одним из распространенных файловых форматов, которые хранят в удобном виде информацию, является формат csv. Каждая строка в файле csv представляет отдельную запись или строку, которая состоит из отдельных столбцов, разделенных запятыми. Собственно поэтому формат и называется Comma Separated Values. Но хотя формат csv - это формат текстовых файлов, Python для упрощения работы с ним предоставляет специальный встроенный модуль csv.
Рассмотрим работу модуля на примере:
В файл записывается двухмерный список - фактически таблица, где каждая строка представляет одного пользователя. А каждый пользователь содержит два поля - имя и возраст. То есть фактически таблица из трех строк и двух столбцов.
🐍 Укус питона // 💬 Чат // #теория #файлы #CSV
Перемещение по файлу
Для перемещения по файлу после его открытия применяется метод seek(). В него передается индекс байта, к которому надо переместить указатель в файле. Например, в примере выше после записи указатель в файле автоматически устанавливается на конец файла. И считывания данных идет с позиции, на которой стоит указатель. И чтобы его сдвинуть в самое начало, применяется вызов:
Аналогичным образом мы можем перемещаться по файлу на нужную позицию. Например, считаем данные, начиная с 5-го символа:
🐍 Укус питона // 💬 Чат // #теория #файлы #текст
Чтение файла. Продолжение.
Если файл небольшой, то его можно разом считать с помощью метода read():
И также применим метод readlines() для считывания всего файла в список строк:
При чтении файла мы можем столкнуться с тем, что его кодировка не совпадает с ASCII. В этом случае мы явным образом можем указать кодировку с помощью параметра encoding:
🐍 Укус питона // 💬 Чат // #теория #файлы #текст
Чтение файла. Продолжение.
Несмотря на то, что мы явно не применяем метод readline() для чтения каждой строки, но в при переборе файла этот метод автоматически вызывается для получения каждой новой строки. Поэтому в цикле вручную нет смысла вызывать метод readline. Консольный вывод:
Однако поскольку функция print неявно добавляет к каждой строке перевод строки "\n", а строки в записанном файлетакже разделяются символом перевода строки "\n", то получается, что каждая строка оканчивается двойным "\n". и чтобы исключить излишнего переноса на другую строку в функцию print можно передать значение end="".
🐍 Укус питона // 💬 Чат // #теория #файлы #текст
Запись в текстовый файл. Продолжение.
Для записи списка строк имеется метод writelines(). В качестве параметра он принимает список строк:
Стоит учитывать, что, если мы хотим, чтобы каждая строка из списка располагалась на отдельной строке в файле, то строка в списке должна заканчиваться на символ "\n".
Еще один способ записи в файл представляет стандартный метод print(), который применяется для вывода данных на консоль:
Для вывода данных в файл в метод print в качестве второго параметра передается название файла через параметр file. А первый параметр представляет записываемую в файл строку.
🐍 Укус питона // 💬 Чат // #теория #файлы #текст
Текстовые файлы. Запись в текстовый файл.
Чтобы открыть текстовый файл на запись, необходимо применить режим w (перезапись), a(дозапись) или r+/w+ (чтение и запись) . Затем для записи применяется метод write(str), в который передается записываемая строка. Стоит отметить, что записывается именно строка, поэтому, если нужно записать числа, данные других типов, то их предварительно нужно конвертировать в строку.
Запишем некоторую информацию в файл "hello.txt":
Если мы откроем папку, в которой находится текущий скрипт Python, то увидем там файл "hello.txt". Этот файл можно открыть в любом текстовом редакторе и при желании изменить.
🐍 Укус питона // 💬 Чат // #теория #файлы #текст
Открытие и закрытие файла. Продолжение.
При открытии файла или в процессе работы с ним мы можем столкнуться с различными исключениями, например, к нему нет доступа и т.д. В этом случае программа выпадет в ошибку, а ее выполнение не дойдет до вызова метода close, и соответственно файл не будет закрыт.
В этом случае мы можем обрабатывать исключения:
В данном случае вся работа с файлом идет во вложенном блоке try. И если вдруг возникнет какое-либо исключение, то в любом случае в блоке finally файл будет закрыт.
🐍 Укус питона // 💬 Чат // #теория #файлы
〰️ CEO Nvidia: В скором времени it-специалисты будут не нужны.
〰️ Cognition Labs анонсировали "программиста из коробки".
〰️ OpenAI уже разносят рынок робототехники.
Чтобы гарантированно остаться на плаву, айтишникам советует возглавить восстание машин. Кто-то должен будет обучать, контролировать и грамотно использовать AI. Важно подхватить новый тренд и адаптироваться к новой реальности.
Ребята из XOR убивают все предрасудки, делятся новостями из IT и рассказывают, как дальше жить айтишникам.
Канал уже стал базой для программистов, а его команда постоянного запускает успешные проекты, анализирует область, разбирается с трендами и постит уникальные кейсы от приглашенных топ-разработчиков.
Подпишись, чтобы не потерять: @xor_journal
Обновление данных.
Для изменения данных достаточно присвоить по ключу новое значение, а для добавления данных - определить новый ключ:
🐍 Укус питона // 💬 Чат // #теория #модули #shelve
Чтение данных.
При чтении данных, если запрашиваемый ключ отсутствует, то генерируется исключение. В этом случае перед получением мы можем проверять на наличие ключа с помощью оператора in:
Также мы можем использовать метод get(). Первый параметр метода - ключ, по которому следует получить значение, а второй - значение по умолчанию, которое возвращается, если ключ не найден.
Используя цикл for, можно перебрать все значения из файла:
🐍 Укус питона // 💬 Чат // #теория #модули #shelve
Модуль shelve. Продолжение.
Для закрытия подключения к файлу вызывается метод close():
Либо можно открывать файл с помощью оператора with. Сохраним и считаем в файл несколько объектов:
🐍 Укус питона // 💬 Чат // #теория #модули #shelve
Модуль shelve.
Для работы с бинарными файлами в Python может применяться еще один модуль - shelve. Он сохраняет объекты в файл с определенным ключом. Затем по этому ключу может извлечь ранее сохраненный объект из файла. Процесс работы с данными через модуль shelve напоминает работу со словарями, которые также используют ключи для сохранения и извлечения объектов.
Для открытия файла модуль shelve использует функцию open():
Где параметр flag может принимать значения, смотрим в пример:
🐍 Укус питона // 💬 Чат // #теория #файлы #бинарные
Модуль pickle.
Также для работы с бинарными файлами Python предоставляет специальный встроенный модуль pickle, который упрощает работу с бинарными файлами. Этот модуль предоставляет два метода:
• dump(obj, file): записывает объект obj в бинарный файл file
• load(file): считывает данные из бинарного файла в объект
Допустим, надо надо сохранить значения двух переменных:
🐍 Укус питона // 💬 Чат // #теория #файлы #бинарные
Работа со словарями.
В примере выше каждая запись или строка представляла собой отдельный список, например, ["Sam", 31]. Но кроме того, модуль csv имеет специальные дополнительные возможности для работы со словарями. В частности, функция csv.DictWriter() возвращает объект writer, который позволяет записывать в файл. А функция csv.DictReader() возвращает объект reader для чтения из файла. Например:
Запись строк также производится с помощью методов writerow() и writerows(). Но теперь каждая строка представляет собой отдельный словарь, и кроме того, производится запись и заголовков столбцов с помощью метода writeheader(), а в метод csv.DictWriter в качестве второго параметра передается набор столбцов.
При чтении строк, используя названия столбцов, мы можем обратиться к отдельным значениям внутри строки: row["name"].
🐍 Укус питона // 💬 Чат // #теория #файлы #CSV
Файлы CSV. Продолжение.
При открытии файла на запись в качестве третьего параметра указывается значение newline="" - пустая строка позволяет корректно считывать строки из файла вне зависимости от операционной системы.
Для записи нам надо получить объект writer, который возвращается функцией csv.writer(file). В эту функцию передается открытый файл. А собственно запись производится с помощью метода writer.writerows(users) Этот метод принимает набор строк. В нашем случае это двухмерный список.
Если необходимо добавить одну запись, которая представляет собой одномерный список, например, ["Sam", 31], то в этом случае можно вызвать метод writer.writerow(user)
В итоге после выполнения скрипта в той же папке окажется файл users.csv, который будет иметь следующее содержимое:
🐍 Укус питона // 💬 Чат // #теория #файлы #CSV
Пример работы с файлами
Теперь напишем небольшой скрипт, в котором будет записывать введенный пользователем массив строк и считывать его обратно из файла на консоль:
🐍 Укус питона // 💬 Чат // #теория #файлы #текст
Чтение и запись.
Для открытия файла сразу для чтения и записи применяются флаги:
• r+: если файл не найден, то генерируется исключение FileNotFoundError
• w+: если файл не существует, то он автоматически создается. Если файл существует, то он перезаписывается
Например, запишем и считаем из файла данные:
🐍 Укус питона // 💬 Чат // #теория #файлы #текст
Чтение файла. Продолжение.
Теперь явным образом вызовем метод readline() для чтения отдельных строк:
Консольный вывод, вторая часть примера:
Метод readline можно использовать для построчного считывания файла в цикле while, конец примера:
🐍 Укус питона // 💬 Чат // #теория #файлы #текст
Чтение файла.
Для чтения файла он открывается с режимом r (Read), и затем мы можем считать его содержимое различными методами:
• readline(): считывает одну строку из файла
• read(): считывает все содержимое файла в одну строку
• readlines(): считывает все строки файла в список
Например, считаем выше записанный файл построчно:
🐍 Укус питона // 💬 Чат // #теория #файлы #текст
Запись в текстовый файл. Продолжение.
Теперь дозапишем в этот файл еще одну строку:
Дозапись выглядит как добавление строки к последнему символу в файле, поэтому, если необходимо сделать запись с новой строки, то можно использовать эскейп-последовательность "\n". В итоге файл hello.txt будет иметь следующее содержимое:
🐍 Укус питона // 💬 Чат // #теория #файлы #текст
Открытие и закрытие файла. Продолжение.
Однако есть и более удобная конструкция - конструкция with:
Эта конструкция определяет для открытого файла переменную myfile и выполняет набор инструкций. После их выполнения файл автоматически закрывается. Даже если при выполнении инструкций в блоке with возникнут какие-либо исключения, то файл все равно закрывается.
Так, перепишем предыдущий пример:
🐍 Укус питона // 💬 Чат // #теория #файлы
📌 Уже 27 марта в 19:00 (мск) стартует наш бесплатный двухдневный онлайн-интенсив.
Во время эфира вы научитесь писать код, запускать и поддерживать простого Telegram-бота. Познакомитесь с синтаксисом языка и увидите, как декомпозировать задачи по разработке.
Приходите, чтобы пообщаться и поучиться у опытного разработчика, узнать всю правду и перспективы Python и получить полезные подарки для комфортного старта в разработку.
🎁 Всем, кто зарегистрировался — Гайд «Как заговорить на сленге IT-специалистов», а каждому участнику — Карта компетенций Python-разработчика.
Модуль difflib, сравнение текста.
Модуль difflib содержит классы и функции для сравнения последовательностей. Модуль может быть использован, для сравнения текста и включает в себя классы и функции, которые создают отчеты в нескольких распространенных форматах, включая HTML. Для сравнения каталогов и файлов смотрите модуль filecmp.
В примерах будем использовать следующие два текста, смотрим пример:
🐍 Укус питона // 💬 Чат // #теория #модули #difflib