Python Community
13.1K subscribers
1.24K photos
26 videos
15 files
712 links
Python Community RU - СНГ сообщество Python-разработчиков

Чат канала: @python_community_chat

Сотрудничество: @cyberJohnny и @Sergey_bzd

РКН реестр:
https://knd.gov.ru/license?id=67847dd98e552d6b54a511ed&registryType=bloggersPermission
Download Telegram
⚡️ Сравниваем файлы

Конечно, можно использовать обычный open, считывать данные и потом их сравнивать. Но зачем, когда есть модуль filecmp, который имеет больший функционал.

cmp(file1, file2) — сравнивает два файла. Возвращает true, если они равны, иначе — false.

dircmp(dir1, dir2) — класс, который сравнивает файлы внутри папок. Хранит внутри себя всю информацию о работе. Например файлы, которые невозможно отсканировать или одинаковые/разные объекты.

Подробнее, как всегда — на сайте документации.

#миниурок #filecmp
⚡️ Работаем с командной строкой

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

Пройдемся по его методам:

run(args) — вызывает команду, переданную в args. Ожидает её выполнения и возвращает CompletedProcess. Если возникает ошибка, то вызывает CalledProcessError.

Popen(args)
— класс, который вызывает args команду в виде нового процесса.

STDOUT — особая переменная, которая говорит, что данные должны идти на вывод в ту же консоль.

DEVNULL — особая переменная, которая избавляется от всех входящих данных.

#миниурок #subprocess
Что выведет этот код?
Anonymous Quiz
52%
True
15%
False
13%
Ошибку
21%
Узнать ответ
⚡️ Узнаём и используем информацию о файлах

os.stat
возвращает информацию о файле в виде stat_result. Но есть одно но — с ней тяжело работать. Тут на помощь приходит модуль stat.

S_ISDIR(mode)
— позволяет узнать, является ли объект папкой (mode — это stat_result.st_mode).

S_ISREG(mode)
— позволяет узнать, является ли объект обычным файлом.

filemode(mode) — возвращает режим в виде прав доступа. Например: -rwxrwxrwx

Здесь собраны самые используемые методы, но подробнее о них можно узнать на сайте документации.

#миниурок #os #stat
⚡️ Задачка с собеседования | #Medium

Условие:

Ваша задача — написать метод, который будет позиционировать строку. Он принимает саму строку, а после align со значениями left, center или right (по умолчанию - left) и длину возвращаемой строки.

Примеры — на изображении выше.

📌 Пишите ваше решение в комментариях. Решение будет через несколько часов на этом канале. 👇

#Задачка_с_собеседования
⚡️ Ответ на предыдущую задачу
⚡️ Безопасно выполняем команды

Модуль shlex хранит в себе функционал для синтаксического анализа текста оболочки, которая напоминает unix.

split(s) — принимает в себя строку и «делит» её на аргументы. Также принимает необязательный параметр comments, который отвечает, обрабатывать ли комментарии.

join(arr) — выполняет обратное действие для split — соединяет все строки.

quote(s) — возвращает безопасную версию строки, позволяя избежать инъекций.

Это далеко не полный функционал библиотеки — с полным руководством вы, как обычно, можете ознакомиться на сайте документации.

#миниурок #shlex
⚡️ Задачка с собеседования | #Easy

Условие:

Ваша задача — написать метод, который будет обрезать строку до определённой длины и добавлять в конец троеточие. Если текст длиннее или же равен max len, то ничего не меняем

Пример:
cut_str("Hello world!") -> Hello worl...
text = "Lorem Ipsum is simply dummy text"
cut_str(text) -> Lorem Ipsu...
cut_str(text, max_len=12) -> Lorem Ipsum...
cut_str(text, max_len=40) -> Lorem Ipsum is simply dummy text

📌 Пишите ваше решение в комментариях. Решение будет через несколько часов на этом канале. 👇

#Задачка_с_собеседования
⚡️ Ответ на предыдущую задачу
⚡️ Методы строк, о которых вы не знали

• ljust
, rjust, center — используются для позиционирования строки. На самом деле, они просто создают строку, не меньше width и заполняют её пробелами (или другим, переданным символом).

expandtabs — возвращает строку, в которой все символы табуляции заменяются на пробелы. Если tabsize не указан, то размер таба составляет 8 пробелов

strip — удаляет пробелы, табуляцию, перенос на новою строку и тому подобные символы из конца и начала строки. Если передать собственные символы, то функция избавится от них. rstrip и lstrip делают тоже самое, только в конце и начале строки

splitlines — возвращает список строк в тексте. Его гораздо удобнее использовать чем метод split, как видно на примере выше. Список всех поддерживаемых символов стоит посмотреть в документации.

#теория #str
Что выведет код выше?
Anonymous Quiz
42%
True
17%
False
20%
Ошибку
22%
Узнать ответ
⚡️ Только ключевые и только позиционные аргументы

Давайте для начала разберёмся. Позиционные аргументы — параметры, которые задаются только в определённом порядке. Они не поддерживают конструкцию типа key = value.

Ключевые аргументы — те, что получают значения через ключ. Они работают только с конструкцией key = value.

Для того, что бы задать порядок позиционных аргументов пишут /. Всё, что находится до этого символа будет зависеть от позиции. Ключевые же используют *, всё что после неё будет задавать только через ключ.

Также вы можете смешивать позиционные, ключевые и обычные аргументы внутри одной функции.

Больше примеров можно найти на сайте документации.

#теория
⚡️ Задачка с собеседования | #Easy

Условие:

Ваша задача — написать функцию, которая будет находить отличия между первым и вторым списком

Пример:

list_diff([], []) -> []
list_diff([], [1, 2]) -> []
list_diff([1, 2], [2]) -> [1]
list_diff([6, 4, 3], [7]) -> [6, 4, 3]

📌 Пишите ваше решение в комментариях. Решение будет через несколько часов на этом канале. 👇

#Задачка_с_собеседования
⚡️ Ответ на предыдущую задачу
⚡️ Разница между global и nonlocal

global
— объявление, которые говорит о том, что перечисленные идентификаторы стоит воспринимать как глобальные. То есть, все изменения внутри функции будут влиять на внешнюю переменную.

nonlocal — оператор, уведомляющий среду, что стоит работать не с локальной переменной, а уровнем выше.

То есть, если вы создадите функцию внутри функции и используете nonlocal, то будет использоваться не глобальная переменная, а та, что в функции-родителя (смотреть method2).

Стоит отметить, что в отличии от global, nonlocal требует, что бы переменная уже была определена.

Ну и как всегда — документация :)

#теория #операторы
Что выведет этот код?
Anonymous Quiz
21%
0
39%
[0]
31%
Ошибку
9%
Узнать ответ
⚡️ Упрощаем поиск багов

Время от времени стоит проверять, правильно ли выполняет функция свою работу и те ли данные она получила. В этом случае нам может помочь assert.

Оператор принимает одну булевскую переменную, которая, если будет равняться False, выбросит исключение AssertionError.

А чтобы не вводить других программистов в заблуждение, можно написать небольшой комментарий к ошибке в виде второго аргумента.

#теория #assert