Получение геолокации по IP с использованием ip2geotools
Недавно я обнаружил увлекательный пакет
Пример кода для получения информации по IP с использованием класса
Этот код использует метод
#python #ip2geotools
Недавно я обнаружил увлекательный пакет
ip2geotools, который обеспечивает возможность получения геолокации по IP из различных баз данных. Пример кода для получения информации по IP с использованием класса
DbIpCity, представляющего некоммерческую базу данных, выглядит следующим образом:from ip2geotools.databases.noncommercial import DbIpCity
def get_ip_geolocation(ip_address):
try:
response = DbIpCity.get(ip_address, api_key='free')
city = response.city
region = response.region
country = response.country
latitude = response.latitude
longitude = response.longitude
print(f"Информация о местоположении для IP {ip_address}:")
print(f"Город: {city}")
print(f"Регион: {region}")
print(f"Страна: {country}")
print(f"Широта: {latitude}")
print(f"Долгота: {longitude}")
except Exception as e:
print(f"Ошибка при получении информации по IP {ip_address}: {e}")
ip_address_to_check = '8.8.8.8'
get_ip_geolocation(ip_address_to_check)
Этот код использует метод
get из класса DbIpCity для получения информации о местоположении по заданному IP-адресу. Помните о том, что для использования некоторых баз данных может потребоваться API-ключ.#python #ip2geotools
👍4👎2
Оптимизация Памяти в Python с Библиотекой gc
Если вы заботитесь о производительности ваших
В приведенном коде мы создаем список объектов
Использование библиотеки
#python #gc #garbagecleaner
Если вы заботитесь о производительности ваших
Python-приложений, то библиотека gc (Garbage Collector) вам точно пригодится. Давайте рассмотрим, почему.gc в Python предназначена для автоматического управления памятью, освобождая вас от рутины по управлению объектами. Это особенно полезно в задачах, связанных с избежанием утечек памяти и оптимизацией её использования.import gc
gc.enable()
class SampleObject:
def __init__(self, value):
self.value = value
objects_list = [SampleObject(i) for i in range(1000000)]
gc.collect()
# Пример обработки данных (например, фильтрация объектов)
filtered_objects = [obj for obj in objects_list if obj.value % 2 == 0]
gc.collect()
print(filtered_objects[:10])
В приведенном коде мы создаем список объектов
SampleObject, который может занять значительное количество памяти. После обработки данных или в других стратегических точках программы, вызывается сборщик мусора для освобождения памяти, занятой неиспользуемыми объектами.Использование библиотеки
gc в Python может значительно улучшить производительность ваших программ, освободив вас от рутины по управлению памятью. Это особенно важно в проектах с большим объемом данных или длительным временем выполнения. #python #gc #garbagecleaner
👍2👎1
Параллельное Исполнение в Python с Помощью Модуля threading
В данном посте, вы узнаете, как использовать модуль
Пример:
В данном примере создаются два потока, каждый из которых выполняет функцию
Модуль💻
#python #threading
В данном посте, вы узнаете, как использовать модуль
threading для создания параллельных потоков выполнения и улучшения производительности ваших приложений.threading позволяет создавать легковесные потоки, которые выполняются параллельно, ускоряя выполнение задач. Это особенно полезно в сценариях, где есть задачи, которые можно выполнить независимо друг от друга.Пример:
import threading
import time
# Функция, которую будем выполнять в параллельных потоках
def print_numbers():
for i in range(5):
time.sleep(1) # Эмулируем длительную операцию
print(f"Thread {threading.current_thread().name}: {i}")
# Создаем два потока
thread1 = threading.Thread(target=print_numbers, name="Thread 1")
thread2 = threading.Thread(target=print_numbers, name="Thread 2")
# Запускаем потоки
thread1.start()
thread2.start()
# Ожидаем завершения потоков перед завершением программы
thread1.join()
thread2.join()
print("Главный поток выполнения завершен.")
В данном примере создаются два потока, каждый из которых выполняет функцию
print_numbers, эмулируя длительную операцию с использованием time.sleep. Запуск потоков осуществляется с помощью метода start(), и главный поток ожидает их завершения с использованием метода join().Модуль
threading предоставляет удобные средства для работы с параллельными потоками в Python, что позволяет улучшить производительность приложений. Однако, следует быть внимательными при работе с потоками из-за потенциальных проблем с блокировками и синхронизацией данных. Попробуйте интегрировать threading в свой код и ускорьте выполнение задач! #python #threading
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2👎1😱1
Скачиваем видео с YouTube
Пакет
Для работы нам необходимо создать объект класса YouTube. Помимо ссылки на видео в конструктор можно передать в качестве параметров функции для обработки прогресса загрузки и завершения.
Большинство видео на ютубе не имеют аудиодорожки на потоках с высоким разрешением, свыше 720p — это связано с технологией передачи DASH, которую использует YouTube.
На картинке мы показали как отфильтровать потоки с прогрессивной передачей и выбрать из полученного списка с максимальным доступным разрешением до 720p.
Для загрузки выбранного потока используем функцию
#python #youtube
Пакет
pytube предоставляет всю небходимую функциональность для скачивания видео с YouTube, а также для сбора всей информации о нем.Для работы нам необходимо создать объект класса YouTube. Помимо ссылки на видео в конструктор можно передать в качестве параметров функции для обработки прогресса загрузки и завершения.
Большинство видео на ютубе не имеют аудиодорожки на потоках с высоким разрешением, свыше 720p — это связано с технологией передачи DASH, которую использует YouTube.
На картинке мы показали как отфильтровать потоки с прогрессивной передачей и выбрать из полученного списка с максимальным доступным разрешением до 720p.
Для загрузки выбранного потока используем функцию
download(), в функцию можно передать в качестве параметров путь до директории для сохранения и имя файла.#python #youtube
👍4👎2❤1
PyJWT: Работаем с JSON Web Tokens в Python
В этом примере мы создаём JWT, который содержит идентификатор пользователя и срок его действия. Затем мы декодируем и проверяем токен, чтобы убедиться, что он ещё действителен и подлинен.
#python #pyjwt
PyJWT — это библиотека Python, предназначенная для кодирования, декодирования и проверки подлинности JSON Web Tokens (JWT).JWT — это открытый стандарт (RFC 7519), который определяет компактный и независимый способ безопасной передачи информации между сторонами в виде JSON-объекта. Эта информация может быть проверена и доверена, так как она подписана цифровой подписью.В этом примере мы создаём JWT, который содержит идентификатор пользователя и срок его действия. Затем мы декодируем и проверяем токен, чтобы убедиться, что он ещё действителен и подлинен.
#python #pyjwt
❤6👎1
Понимание различий между операторами сравнения == и is
Множество разработчиков сталкиваются с трудностями в отличии двух операторов сравнения:
Оператор
В
#python
Множество разработчиков сталкиваются с трудностями в отличии двух операторов сравнения:
== и is, что может привести к неожиданным ошибкам в коде.Оператор
== сравнивает значения двух объектов, чтобы определить их равенство. В отличие от него, оператор is проверяет, ссылаются ли две переменные на один и тот же объект в памяти, тем самым проверяя их идентичность.В
Python из соображений эффективности происходит кэширование небольших чисел и коротких строк, что может привести к путанице и неочевидным результатам при использовании этих операторов.#python
❤4👎1
Получение срезов итераторов
Если вы попытаетесь получить срез итератора, то столкнётесь с ошибкой TypeError, сообщающей о том, что на объект-генератор нельзя оформить подписку. Однако эта проблема поддаётся решению (см картинку).
Воспользовавшись методом itertools.islice, можно создать объект islice, который представляет собой итератор, выдающий нужные элементы. Однако здесь важно отметить то, что эта конструкция использует все элементы генератора вплоть до начала среза и все элементы в объекте islice.
#python
Если вы попытаетесь получить срез итератора, то столкнётесь с ошибкой TypeError, сообщающей о том, что на объект-генератор нельзя оформить подписку. Однако эта проблема поддаётся решению (см картинку).
Воспользовавшись методом itertools.islice, можно создать объект islice, который представляет собой итератор, выдающий нужные элементы. Однако здесь важно отметить то, что эта конструкция использует все элементы генератора вплоть до начала среза и все элементы в объекте islice.
#python
❤3👎2
Возврат нескольких значений из функции
Знаете ли вы, что можно осуществлять возврат нескольких значений из функции? Вот как это сделать. Ознакомьтесь с приведенным выше примером кода.
#python
Знаете ли вы, что можно осуществлять возврат нескольких значений из функции? Вот как это сделать. Ознакомьтесь с приведенным выше примером кода.
#python
👎5❤2
Знакомство с библиотекой NumPy в Python
Что такое
Преимущества
- Производительность:
- Удобство:
- Интеграция: Библиотека интегрируется легко с другими библиотеками, такими как
Пример использования
#python #NumPy #научныевычисления #анализданных
Что такое
NumPy?NumPy (Numerical Python) - это популярная библиотека для вычислительных операций с многомерными массивами и матрицами, а также для выполнения высокоуровневых математических функций. Она предоставляет эффективные инструменты для работы с большими объемами данных и позволяет выполнять различные операции, такие как суммирование, умножение, индексацию и многое другое, без необходимости явно создавать циклы.Преимущества
NumPy:- Производительность:
NumPy выполняет операции над массивами быстрее, чем стандартные структуры данных Python.- Удобство:
NumPy предоставляет удобные методы для работы с данными, такие как срезы, индексация и броадкастинг.- Интеграция: Библиотека интегрируется легко с другими библиотеками, такими как
SciPy, pandas и Matplotlib, что делает ее мощным инструментом для научных вычислений.Пример использования
NumPy:import numpy as np
# Создаем одномерный массив
arr = np.array([1, 2, 3, 4, 5])
# Выполняем операции над массивом
arr_squared = arr ** 2
arr_sum = np.sum(arr)
print("Исходный массив:", arr)
print("Квадраты элементов:", arr_squared)
print("Сумма элементов:", arr_sum)
NumPy также предоставляет функции для работы с многомерными массивами, линейной алгеброй, случайными числами и многое другое.#python #NumPy #научныевычисления #анализданных
👍4👎1
Работаем с атрибутами объектов
Помимо привычного обращения к атрибутам объектов через точку, в Python есть 4 специальных функции:
По названиям можно понять, что первые три отвечают за получение, установку и удаление атрибута. А последний проверяет, существует ли атрибут с указанным названием у объекта или нет.
Во всех функциях первыми двумя аргументами идут объект и название атрибута в виде строки. В
На практике использование подобного — довольно редкий случай, но иногда может сильно выручить, так что берите на вооружение.
#python #tips
Помимо привычного обращения к атрибутам объектов через точку, в Python есть 4 специальных функции:
getattr, setattr, delattr и hasattr.По названиям можно понять, что первые три отвечают за получение, установку и удаление атрибута. А последний проверяет, существует ли атрибут с указанным названием у объекта или нет.
Во всех функциях первыми двумя аргументами идут объект и название атрибута в виде строки. В
setattr также нужно передать новое значение для атрибута.На практике использование подобного — довольно редкий случай, но иногда может сильно выручить, так что берите на вооружение.
#python #tips
👍6👎2
Разница между генераторными выражениями и генераторами коллекций
Записи в первой и второй строчке в коде выше очень похожи, но различаются видами скобок. В генераторе списка они квадратные, а в генераторном выражении – круглые.
Распечатав переменные, можно заметить, что значением переменной
Если вам нужен результат, например в виде списка, прямо сейчас для дальнейшего выполнения программы, то используйте генераторы коллекций.
А если же значения понадобятся еще не скоро или вообще неизвестно, понадобится ли они вообще, то предпочтительнее генераторы, чтобы не занимать лишнюю память и не нагружать систему.
#python
Записи в первой и второй строчке в коде выше очень похожи, но различаются видами скобок. В генераторе списка они квадратные, а в генераторном выражении – круглые.
Распечатав переменные, можно заметить, что значением переменной
a является список, а переменная x хранит в себе объект генератора. И здесь возникает вопрос, что же использовать.Если вам нужен результат, например в виде списка, прямо сейчас для дальнейшего выполнения программы, то используйте генераторы коллекций.
А если же значения понадобятся еще не скоро или вообще неизвестно, понадобится ли они вообще, то предпочтительнее генераторы, чтобы не занимать лишнюю память и не нагружать систему.
#python
👍5👎1
Настройка ширины текста с использованием модуля textwrap
Приведем пример использования:
Результат выполнения кода будет следующим:
Как видно из примера, слова переносятся на новые строки, при этом ничего не обрывается на полуслове. Это обеспечивает читабельность и красивый внешний вид текста при заданной ширине.
#python #textwrap
textwrap предоставляет функции для форматирования текста, делая его более читаемым и приятным для восприятия. Одной из таких функций является fill, которая позволяет настраивать ширину текста в символах, обеспечивая корректное перенос слов на новые строки.Приведем пример использования:
import textwrap
# Исходный текст
original_text = "Мощные функции модуля textwrap обеспечивают красивое форматирование текста, а функция fill позволяет задать ширину текста в символах."
# Задаем ширину текста в 30 символов
width = 30
# Применяем функцию fill для форматирования текста
formatted_text = textwrap.fill(original_text, width)
print(formatted_text)
Результат выполнения кода будет следующим:
Мощные функции модуля
textwrap обеспечивают
красивое форматирование
текста, а функция fill
позволяет задать ширину
текста в символах.
Как видно из примера, слова переносятся на новые строки, при этом ничего не обрывается на полуслове. Это обеспечивает читабельность и красивый внешний вид текста при заданной ширине.
#python #textwrap
👍7👎1
Ruff
Основным преимуществом
#python #ruff
Ruff — Чрезвычайно быстрый линтер и форматер кода на Python, написанный на Rust.Основным преимуществом
Ruff является его скорость. Ruff в 10-100 раз быстрее аналогов. В сравнении с flake8, автор заявляет о практически полном совпадении с набором правил инструмента и нативной реализацией популярных плагинов (flake8-bugbear и т.д.). Также Ruff совместим с Black «из коробки».Ruff может форматировать код. Например, он автоматически удаляет неиспользуемые импорты. Что касается сортировки и группировки строк импорта, то она практически идентична isort.#python #ruff
❤6👍3👎1
dict.get()
Синтаксис метода
#python
dict.get() — это метод словаря, который используется для получения значения по заданному ключу. Однако, в отличие от обращения к элементу словаря с использованием квадратных скобок (dict[key]), метод get() предоставляет дополнительную возможность задать значение по умолчанию, которое будет возвращено, если ключ не найден в словаре.Синтаксис метода
get() выглядит так:value = dict.get(key, default)key: Ключ, по которому производится поиск в словаре.default (необязательный): Значение, которое будет возвращено, если ключ не найден в словаре. Если default не указан, и ключ не найден, метод вернет None.#python
👍2👎1
Исследование структуры кода с помощью модуля ast
При работе с кодом на Python, иногда возникает необходимость анализа его структуры. Для этого идеально подходит модуль
Что такое
Пример использования модуля
В данном примере мы использовали функцию ast.pa
Анализ структуры кода:
В данном примере мы использовали модуль ast для анализа структуры кода. Функция ast.walk позволяет
Модуль ast также предост
#python #ast #анализкода
При работе с кодом на Python, иногда возникает необходимость анализа его структуры. Для этого идеально подходит модуль
ast (Abstract Syntax Trees), который предоставляет мощные инструменты для работы с абстрактными синтаксическими деревьями.Что такое
ast?ast - это модуль Python, который позволяет разбирать и анализировать исходный код на Python, представляя его в виде абстрактного синтаксического дерева (AST). AST представляет собой структурированное представление кода, которое легко интерпретировать и анализировать.Пример использования модуля
ast:
import ast
code = "print('Hello, ast!')"
tree = ast.parse(code)
print(ast.dump(tree))
В данном примере мы использовали функцию ast.pa
rse для разбора строки кода с помощью модуля ast. Функция ast.dump выводит структуру AST в удобочитаемом формате.Анализ структуры кода:
import ast
code = """
def greet(name):
print(f'Hello, {name}!')
"""
tree = ast.parse(code)
for node in ast.walk(tree):
if isinstance(node, ast.FunctionDef):
print(f"Найдена функция: {node.name}")
elif isinstance(node, ast.Print):
print("Обнаружен оператор печати")
В данном примере мы использовали модуль ast для анализа структуры кода. Функция ast.walk позволяет
обойти все узлы AST, а затем мы проверяем их типы для выделения определенных элементов, таких как функции или операторы.Модуль ast также предост
авляет возможности для более сложных операций, таких как изменение кода, создание новых выражений и многое другое.#python #ast #анализкода
👍2👎1
Дзен Python
Тим Петерс ещё в далёком 1999 году предложил PEP 20, который должен был содержать в себе 20 правил по написанию кода. Но в итоге их оказалось всего 19.
Последний пункт он предложил написать Гвидо Ван Россуму, однако он не написал ничего. В коммьюнити Python пришли к выводу, что разработчик языка хотел этим сказать, что никакие правила не являются абсолютными и везде есть исключения.
Посмотреть Дзен, или же философию Python, можно с помощью импорта модуля
#python #дзен
Тим Петерс ещё в далёком 1999 году предложил PEP 20, который должен был содержать в себе 20 правил по написанию кода. Но в итоге их оказалось всего 19.
Последний пункт он предложил написать Гвидо Ван Россуму, однако он не написал ничего. В коммьюнити Python пришли к выводу, что разработчик языка хотел этим сказать, что никакие правила не являются абсолютными и везде есть исключения.
Посмотреть Дзен, или же философию Python, можно с помощью импорта модуля
this, а вариант перевода Дзена на русском языке здесь.#python #дзен
❤4👍1👎1
Используйте dict.get() вместо dict[]
Есть несколько способов получения значений из словарей, и даже по такой теме разработчики часто спорят.
Многие получают значения по ключам через квадратные скобки, но если такого ключа нет, то будет вызвано исключение.
Поэтому мы считаем, что лучше использовать метод
Таким образом, если значение по ключу не найдено, то вернется дефолтное значение.
В итоге, мы убираем возможные ошибки в случае, если нужных ключей в словаре нет.
#python #dict
Есть несколько способов получения значений из словарей, и даже по такой теме разработчики часто спорят.
Многие получают значения по ключам через квадратные скобки, но если такого ключа нет, то будет вызвано исключение.
Поэтому мы считаем, что лучше использовать метод
get у словарей. Его основной плюс заключается в том, что он принимает опциональный аргумент, отвечающий за значение по умолчанию. Таким образом, если значение по ключу не найдено, то вернется дефолтное значение.
В итоге, мы убираем возможные ошибки в случае, если нужных ключей в словаре нет.
#python #dict
👍2👎2
Слайсы
Слайс (или срез, англ. slice) — это способ выбрать часть последовательности (например, строки, списка, кортежа) путем указания начального и конечного индексов, а также шага. Слайсы используются для извлечения подстрок, подсписков или подкортежей из исходной последовательности.
Слайсы полезны для работы с большими последовательностями данных и предоставляют удобный способ извлечения нужных элементов из них.
#python #slice
Слайс (или срез, англ. slice) — это способ выбрать часть последовательности (например, строки, списка, кортежа) путем указания начального и конечного индексов, а также шага. Слайсы используются для извлечения подстрок, подсписков или подкортежей из исходной последовательности.
Слайсы полезны для работы с большими последовательностями данных и предоставляют удобный способ извлечения нужных элементов из них.
#python #slice
👍1👎1
Форматируем строку для URL-адреса
Для начала стоит вспомнить, что слаг (slug) — это уникальная строка-идентификатор, понятная человеку и содержащая только "безопасные" символы: латинские символы в нижнем регистре, цифры и дефис.
Чаще всего такое понятие можно встретить в контексте URL-адресов. Например, можно формировать слаг из названия какой-нибудь статьи и вставлять его в ссылку, чтобы людям было понятно, куда они переходят.
Выше в коде мы написали простую функцию, где использовали методы
Также для удаления некоторых символов и замены на знак дефиса были использованы регулярные выражения и встроенный пакет
#python #re
Для начала стоит вспомнить, что слаг (slug) — это уникальная строка-идентификатор, понятная человеку и содержащая только "безопасные" символы: латинские символы в нижнем регистре, цифры и дефис.
Чаще всего такое понятие можно встретить в контексте URL-адресов. Например, можно формировать слаг из названия какой-нибудь статьи и вставлять его в ссылку, чтобы людям было понятно, куда они переходят.
Выше в коде мы написали простую функцию, где использовали методы
lower() для приведения в нижний регистр и strip() для удаления пробелов слева и справа. Также для удаления некоторых символов и замены на знак дефиса были использованы регулярные выражения и встроенный пакет
re для работы с ними. #python #re
👍3👎1
Работа с форматированием текста
textwrap — это стандартная библиотека, которая спользуется для форматирования текста в тех случаях, когда нам нужна красивая печать.
Он предлагает функциональность аналогичную текстовым редакторам и текстовым процессорам.
Немного о возможностях:
#python #textwrap
textwrap — это стандартная библиотека, которая спользуется для форматирования текста в тех случаях, когда нам нужна красивая печать.
Он предлагает функциональность аналогичную текстовым редакторам и текстовым процессорам.
Немного о возможностях:
textwrap.fill() — принимает текст и возвращает отформатированный текст, первая строка сохраняет свой отступ, а пробелы в начале каждой последующей строки вставляются в абзац.textwrap.dedent() — используется для удаления общего префикса пробела из всех строк в тексте.textwrap.indent() — используется для добавления текст префикса ко всем строкам в параграфе#python #textwrap
❤1