My Python
2 subscribers
136 photos
3 videos
1 file
144 links
Download Telegram
Forwarded from Python 🇺🇦
Дізнаємося кодування тексту

Думаю, у всіх були ситуації, коли ви відкрили файл або отримали відповідь від сервера, а всередині виявлявся набір дивних символів у незрозумілому кодуванні.

Пакет chardet був створений для роботи з кодуванням. Його метод detect видає передбачуване кодування з точністю від 0 до 1.

У прикладі на картинці ми отримали відповідь на запит до сервера, взяли його вміст і перевірили кодування через цей метод.

#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
SciPy: Випукла оболонка

Випукла оболонка містить у собі набір точок та діє як межа кластера, яка допомагає визначити всі точки всередині кластера. За допомогою методу ConvexHull() ти можеш створити випуклу оболонку.

#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
Тимчасові файли

У стандартній бібліотеці Python є модуль tempfile, який містить класи та методи для коректної роботи з тимчасовими файлами та директоріями.

Функція TemporaryFile створює тимчасовий файл у системній директорії та повертає файлоподібний об'єкт.

Створений тимчасовий файл буде видалено автоматично після закриття файлу або при виході з контекстного менеджера.

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

#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
Підключаємося до сервера по ssh

Пакет paramiko дозволяє встановлювати з'єднання з віддаленими машинами за протоколом SSH2 і робити там ті самі операції, якби ви підключалися через, наприклад, утиліту ssh на лінуксі.

Використовувати модуль досить просто, приклад основних методів на зображенні вище. До речі, цікавий факт, Paramiko - це поєднання слів "параноїк" та "друг" мовою есперанто.

Встановлюється пакет звичним чином через пакетний менеджер pip. Документацію можна переглянути тут.

#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
Завантажуємо відео з YouTube

Пакет pytube надає всю необхідну функціональність для завантаження відео з YouTube, а також для збирання всієї інформації про нього.

Для роботи нам необхідно створити об'єкт класу YouTube. Крім посилання на відео в конструктор можна передати у якості параметрів функції для обробки прогресу завантаження та завершення.

Більшість відео на ютубі не мають аудіодоріжки на потоках з високою роздільною здатністю, понад 720p — це пов'язано з технологією передачі DASH, яку використовує сервіс. Про вирішення цього нюансу поговоримо трішки пізніше.

На картинці показано, як відфільтрувати потоки з прогресивною передачею і вибрати з отриманого списку з максимальною доступною роздільною здатністю до 720p.

Для завантаження вибраного потоку використовуємо функцію download(), в функцію можна передати у якості параметрів шлях до директорії для збереження та ім'я файлу.

#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
Об'єднуємо відео та аудіо потоки

Через технологію потокової передачі DASH (Dynamic Adaptive Streaming over HTTP), яка використовується youtube, ми не можемо отримати відразу відео в потрібній якості зі звуковою доріжкою через її відсутність у потоці.

Як рішення ми можемо окремо забрати аудіо та відео та об'єднати за допомогою утиліти ffmpeg. Для цього обираємо потрібні потоки video та audio, після чого передаємо url'и в команду для ініціювання створення процесу для скачування та об'єднання потоків за допомогою ffmpeg.

#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
Працюємо з буфером обміну

Тут все просто: є пакет pyperclip, який дозволяє відправляти текст у буфер обміну вашого комп'ютера та отримувати його звідти.

У цьому пакеті є дві основні функції — copy() та paste(), за назвою яких зрозуміло їхнє призначення.

Таким чином, можна прямо через код копіювати виведення програми у буфер обміну замість того, щоб робити це вручну.

#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
Очищаємо рядки

Найчастіше обробка вхідних даних зводиться до перетворення символів у верхній чи нижній регістр. Іноді дані можна очистити за допомогою регулярного виразу.

Але у випадках, коли завдання ускладнюється, можна застосувати більш зручний спосіб її вирішення. За допомогою словника зі значеннями для заміни символів та методу translate виходить вкрай лаконічний код.

У прикладі бачимо, як символи перенесення рядка \n і табуляції \t замінюються на звичайні пробіли, а символ \r видаляється з рядка повністю.

#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
Надсилаємо запити з HTTPX

Цікавий пакет для роботи із веб-запитами. Як кажуть самі розробники, це HTTP-клієнт наступного покоління.

Порівнюючи зі звичним requests, httpx має такі переваги:

— Стандартний синхронний інтерфейс, але також є підтримка асинхронності
— Підтримка HTTP/1.1 та HTTP/2
— Можливість надсилати запити безпосередньо до WSGI та ASGI додатків
- Повна підтримка анотацій типів
- 100% покриття тестами

Раджу подивитися їх доки. Ще в них є туторіал для просунутого використання.

#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
Генеруємо QR-код

Простий, але зручний та корисний пакет для створення QR-кодів. Для малювання картинок використовується Pillow, тому переконайтеся, що він у вас встановлений.

Щоб створити об'єкт картинки з QR-кодом, необхідно викликати метод make() і передати дані як аргумент. Для збереження потрібно застосувати метод save() до отриманого об'єкту.

Ще пакет дозволяє створювати QR-коди на основі картинок та у 6 різних стилях. Про це все, а також про просунуті приклади використання можна почитати безпосередньо в документації.

#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
RegEx: sub

Функція sub() замінює співпадіння текстом на твій вибір. У першому прикладі прогалини замінюються на 9. За потреби ти можеш контролювати кількість замін, вказавши параметр count. У другому прикладі прогалини замінюються лише двічі.

#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
re.findall

Функція findall() повертає список, що містить усі збіги. Список містить співпадіння у тому порядку, в якому вони були знайдені. Якщо збігів не знайдено, повертається порожній список.

#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
Відловлюємо баги з assert

При виконанні інструкції assert з логічним виразом, результат якого дорівнює True, нічого не станеться.

Але якщо спробувати виконати інструкцію assert з логічним виразом, який дорівнює False, то буде згенеровано виняток AssertionError.

Винятки AssertionError призначені скоріше для налагодження. При написанні програм на етапі розробки ми можемо бачити, що робимо щось не так (наприклад, передали в метод некоректне значення).

Також не потрібно, наприклад, обробляти введення користувача і намагатися обробити виключення AssertionError блоком try-except.

Якщо у вашому коді буде дуже багато assert'ів, то це торкнеться і продуктивності програми.

#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
eq та hash

Python автоматично викликає метод eq класу, коли ти використовуєш оператор == для порівняння екземплярів класу. Хеш об'єкта - це ціле число, що представляє значення об'єкта, і його можна отримати за допомогою функції hash(), якщо об'єкт можна хешувати.

👀 Відео, котре допоможе розібратися із цими методами.

#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
Визначення літеральних типів

Коли нам знадобиться визначити з отриманого рядка літеральний тип (рядки, числа, списки, кортежі, словники, логічні значення та None), ми можемо скористатися функцією literal_eval() із модуля ast.

Ця функція допоможе безпечно визначити літеральний тип, а якщо був переданий не літерал, то викине виняток. Це можна використовувати для оцінки виразів із зовнішніх джерел при парсингу файлів.

#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
call

Метод call дозволяє писати класи, у яких екземпляри поводяться як функції і можуть викликатись як функції.

👀 Відео, де демонструється робота цього методу. Дізнаємось, як з його допомогою можна замінювати замикання функцій та створювати класи-декоратори функцій.

#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
list.reverse

list.reverse – це вбудований метод, який відображає об'єкти списку у зворотному порядку. Коли замість списку використовується щось, крім списку, повертається помилка AttributeError. Метод корисний для перевірки, чи є список паліндром.

#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
Іменовані кортежі

Кортежі tuple, по суті, є незмінними списками. Структура даних є зручною, але ми можемо отримувати дані, використовуючи тільки числові індекси.

Немає можливості дати імена окремим елементам, збереженим у кортежі. Це може вплинути на читання коду. І в такому випадку використовують іменовані кортежі namedtuple з collections.

Кожен об'єкт в іменованому кортежі може бути доступний через унікальний, зручний для читання людиною ідентифікатор. При цьому вся функціональність від звичайних кортежів зберігається.

#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
Прогрес виконання програми

Індикатори прогресу додають наочності у скриптах, які виконують якісь функції, що потребують часу для виконання. Модуль tqdm є простим та лаконічним варіантом.

Звичний range можна замінити trange для візуалізації прогресу. А для ітерації за якоюсь послідовністю, досить просто передати її у функцію tqdm. Також модуль добре себе зарекомендував і у Jupyter Notebook.

До речі, цікавий факт - назва tqdm походить від арабського слова "taqaddum" (تقدّم), яке означає "прогрес," а також це ще й скорочення від "я тебе сильно люблю" іспанською (te quiero demasiado).

#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
Гарні таблиці в терміналі

PrettyTable - це проста бібліотека, призначена для швидкого та легкого представлення табличних даних у вигляді ASCII. Модуль можна встановити в звичний спосіб через pip.

Для створення таблиць та роботи з ними використовується клас PrettyTable із цього модуля. Задати назву для стовпців можна за допомогою атрибута fields_name. Рядки до таблиці додаються шляхом виклику методу add_row.

Більш того, модуль prettytable дозволяє регулювати різні параметри, сортувати дані, працювати з html, а також взаємодіяти з csv і sql таблицями. Отже можливостей у цього модуля достатньо.

#practice // Python 🇺🇦