⚡️ Сравниваем файлы
Конечно, можно использовать обычный open, считывать данные и потом их сравнивать. Но зачем, когда есть модуль filecmp, который имеет больший функционал.
cmp(file1, file2) — сравнивает два файла. Возвращает true, если они равны, иначе — false.
dircmp(dir1, dir2) — класс, который сравнивает файлы внутри папок. Хранит внутри себя всю информацию о работе. Например файлы, которые невозможно отсканировать или одинаковые/разные объекты.
Подробнее, как всегда — на сайте документации.
#миниурок #filecmp
Конечно, можно использовать обычный open, считывать данные и потом их сравнивать. Но зачем, когда есть модуль filecmp, который имеет больший функционал.
cmp(file1, file2) — сравнивает два файла. Возвращает true, если они равны, иначе — false.
dircmp(dir1, dir2) — класс, который сравнивает файлы внутри папок. Хранит внутри себя всю информацию о работе. Например файлы, которые невозможно отсканировать или одинаковые/разные объекты.
Подробнее, как всегда — на сайте документации.
#миниурок #filecmp
⚡️ Работаем с командной строкой
В этом нам поможет модуль subprocess — он позволяет создавать новые процессы, подключать вывод и работать с кодом возврата.
Пройдемся по его методам:
run(args) — вызывает команду, переданную в args. Ожидает её выполнения и возвращает CompletedProcess. Если возникает ошибка, то вызывает CalledProcessError.
Popen(args) — класс, который вызывает args команду в виде нового процесса.
STDOUT — особая переменная, которая говорит, что данные должны идти на вывод в ту же консоль.
DEVNULL — особая переменная, которая избавляется от всех входящих данных.
#миниурок #subprocess
В этом нам поможет модуль subprocess — он позволяет создавать новые процессы, подключать вывод и работать с кодом возврата.
Пройдемся по его методам:
run(args) — вызывает команду, переданную в args. Ожидает её выполнения и возвращает CompletedProcess. Если возникает ошибка, то вызывает CalledProcessError.
Popen(args) — класс, который вызывает args команду в виде нового процесса.
STDOUT — особая переменная, которая говорит, что данные должны идти на вывод в ту же консоль.
DEVNULL — особая переменная, которая избавляется от всех входящих данных.
#миниурок #subprocess
⚡️ Узнаём и используем информацию о файлах
os.stat возвращает информацию о файле в виде stat_result. Но есть одно но — с ней тяжело работать. Тут на помощь приходит модуль stat.
S_ISDIR(mode) — позволяет узнать, является ли объект папкой (mode — это stat_result.st_mode).
S_ISREG(mode) — позволяет узнать, является ли объект обычным файлом.
filemode(mode) — возвращает режим в виде прав доступа. Например: -rwxrwxrwx
Здесь собраны самые используемые методы, но подробнее о них можно узнать на сайте документации.
#миниурок #os #stat
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) и длину возвращаемой строки.
Примеры — на изображении выше.
📌 Пишите ваше решение в комментариях. Решение будет через несколько часов на этом канале. 👇
#Задачка_с_собеседования
Условие:
Ваша задача — написать метод, который будет позиционировать строку. Он принимает саму строку, а после align со значениями left, center или right (по умолчанию - left) и длину возвращаемой строки.
Примеры — на изображении выше.
📌 Пишите ваше решение в комментариях. Решение будет через несколько часов на этом канале. 👇
#Задачка_с_собеседования
⚡️ Безопасно выполняем команды
Модуль shlex хранит в себе функционал для синтаксического анализа текста оболочки, которая напоминает unix.
split(s) — принимает в себя строку и «делит» её на аргументы. Также принимает необязательный параметр comments, который отвечает, обрабатывать ли комментарии.
join(arr) — выполняет обратное действие для split — соединяет все строки.
quote(s) — возвращает безопасную версию строки, позволяя избежать инъекций.
Это далеко не полный функционал библиотеки — с полным руководством вы, как обычно, можете ознакомиться на сайте документации.
#миниурок #shlex
Модуль shlex хранит в себе функционал для синтаксического анализа текста оболочки, которая напоминает unix.
split(s) — принимает в себя строку и «делит» её на аргументы. Также принимает необязательный параметр comments, который отвечает, обрабатывать ли комментарии.
join(arr) — выполняет обратное действие для split — соединяет все строки.
quote(s) — возвращает безопасную версию строки, позволяя избежать инъекций.
Это далеко не полный функционал библиотеки — с полным руководством вы, как обычно, можете ознакомиться на сайте документации.
#миниурок #shlex
⚡️ Задачка с собеседования | #Easy
Условие:
Ваша задача — написать метод, который будет обрезать строку до определённой длины и добавлять в конец троеточие. Если текст длиннее или же равен max len, то ничего не меняем
Пример:
#Задачка_с_собеседования
Условие:
Ваша задача — написать метод, который будет обрезать строку до определённой длины и добавлять в конец троеточие. Если текст длиннее или же равен 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
• ljust, rjust, center — используются для позиционирования строки. На самом деле, они просто создают строку, не меньше width и заполняют её пробелами (или другим, переданным символом).
• expandtabs — возвращает строку, в которой все символы табуляции заменяются на пробелы. Если tabsize не указан, то размер таба составляет 8 пробелов
• strip — удаляет пробелы, табуляцию, перенос на новою строку и тому подобные символы из конца и начала строки. Если передать собственные символы, то функция избавится от них. rstrip и lstrip делают тоже самое, только в конце и начале строки
splitlines — возвращает список строк в тексте. Его гораздо удобнее использовать чем метод split, как видно на примере выше. Список всех поддерживаемых символов стоит посмотреть в документации.
#теория #str
⚡️ Только ключевые и только позиционные аргументы
Давайте для начала разберёмся. Позиционные аргументы — параметры, которые задаются только в определённом порядке. Они не поддерживают конструкцию типа key = value.
Ключевые аргументы — те, что получают значения через ключ. Они работают только с конструкцией key = value.
Для того, что бы задать порядок позиционных аргументов пишут /. Всё, что находится до этого символа будет зависеть от позиции. Ключевые же используют *, всё что после неё будет задавать только через ключ.
Также вы можете смешивать позиционные, ключевые и обычные аргументы внутри одной функции.
Больше примеров можно найти на сайте документации.
#теория
Давайте для начала разберёмся. Позиционные аргументы — параметры, которые задаются только в определённом порядке. Они не поддерживают конструкцию типа 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 требует, что бы переменная уже была определена.
Ну и как всегда — документация :)
#теория #операторы
global — объявление, которые говорит о том, что перечисленные идентификаторы стоит воспринимать как глобальные. То есть, все изменения внутри функции будут влиять на внешнюю переменную.
nonlocal — оператор, уведомляющий среду, что стоит работать не с локальной переменной, а уровнем выше.
То есть, если вы создадите функцию внутри функции и используете nonlocal, то будет использоваться не глобальная переменная, а та, что в функции-родителя (смотреть method2).
Стоит отметить, что в отличии от global, nonlocal требует, что бы переменная уже была определена.
Ну и как всегда — документация :)
#теория #операторы
⚡️ Упрощаем поиск багов
Время от времени стоит проверять, правильно ли выполняет функция свою работу и те ли данные она получила. В этом случае нам может помочь assert.
Оператор принимает одну булевскую переменную, которая, если будет равняться False, выбросит исключение AssertionError.
А чтобы не вводить других программистов в заблуждение, можно написать небольшой комментарий к ошибке в виде второго аргумента.
#теория #assert
Время от времени стоит проверять, правильно ли выполняет функция свою работу и те ли данные она получила. В этом случае нам может помочь assert.
Оператор принимает одну булевскую переменную, которая, если будет равняться False, выбросит исключение AssertionError.
А чтобы не вводить других программистов в заблуждение, можно написать небольшой комментарий к ошибке в виде второго аргумента.
#теория #assert