Технологические заметки
10 subscribers
30 photos
1 video
20 links
Пишу блог для себя.
Основной контент: парсинги, автоматизация и аналитика.
Стек технологий: Python, VBA и пр.
Download Telegram
#ТаковПуть

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

Обычно Python устанавливают с официального сайта:
https://www.python.org

Однако с GitHub возможно не только скачать последнюю версию Python, но и получить доступ к версиям, которые ещё не были включены в официальные дистрибутивы. Это может быть полезно для тестирования новых функций и собственных сборок!

git clone https://github.com/python/cpython
cd cpython
👍1
#ЧистыйКот

Простота и ясность

Код должен быть написан так, чтобы через год после его создания не возник вопрос:

«Да что тут вообще происходит?»


Некоторые разработчики могут думать, что их код должен быть понятен только им, но это приводит к тому, что они сами себе, а не другим создают дополнительные трудности.

Читаемый код улучшает качество, упрощает поддержку и делает совместную работу эффективнее.
👍1
#ТаковПуть

GIL (Global Interpreter Lock)


GIL в Python является ключевым элементом, который обеспечивает синхронизацию потоков и предотвращает конфликты, но тормозит работу параллельных вычислений.

GIL гарантирует, что только один поток может выполнять байт-код Python в любой момент времени.

В Python 3.13 появилась экспериментальная возможность отключить GIL. И ожидается, что в версии 3.14 сборка без GIL станет стандартом.

Из моего опыта, собирать Python с отключенным GIL на Linux занимает меньше времени, чем на Windows.
#ТаковПуть

Продолжаем обсуждать GIL


В Python 3.13 появилась возможность не только отключить GIL при сборке из исходников, что может оказаться для многих сложным, но для нашего с вами удобства при установке Python 3.13 появилась опция, которая позволяет установить два интерпретатора на компьютер: с GIL и без него. (см. скриншот)

На примере ниже видно, на сколько Python быстрее без GIL (python3.13t). На скриншоте результат.

from threading import Thread
from time import time


def count(n):
while n > 0:
n -= 1

def run_threads():
args = (10**8,)
thread1 = Thread(target=count, args=args)
thread2 = Thread(target=count, args=args)
thread1.start()
thread2.start()
thread1.join()
thread2.join()

def main():
start_time = time()
run_threads()
finish = time() - start_time
print(f"Время выполнения: {finish:.2f} сек")


if __name__ == "__main__":
main()
1
#ЧистыйКот

Точка входа

В Python-программе, как правило, выделяется один основной файл, который служит точкой входа для выполнения программы. Традиционно этот файл располагается в корне проекта и носит имя main.py.
Расположение в корне и наименование не являются строго обязательными.
Например, у меня не прижилось наименование main.py, я называю такой файл app.py.
Для себя я выработал определенный стиль написания программ, в частности, даже если весь проект на Python состоит из одного файла, я создаю второй файл с названием app.py.
│ app.py
│ my_prog.py

Из файла app.py я вызываю основную программу, которая лежит в первом файле.
Файл app.py обычно содержит примерно такой код:
from my_prog import MyProg

if __name__ == '__main__':
prog = MyProg()
prog.run()

Я не настаиваю на своем подходе к неймингу и размещению компонентов программы. Однако считаю важным выработать привычку создавать отдельную точку входа, даже для одномодульных программ.
👍1
#ТаковПуть

Рассмотрим варианты работы с Excel из Python. Часть 1.

1) Самый простой способ это использовать внешние библиотеки. К примеру:
pip install openpyxl

2) Можно подключиться к объектной модели Excel, Outlook, Word и другим личным программам компании Microsoft напрямую!

pip install pywin32

3) Если у вас есть доступ к Visual Studio, вы можете установить интерпретатор IronPython и подключаться к библиотекам Excel, Word и пр через промежуточный язык CRL.
pip install clr

Подключение к библиотеке Excel
import clr
clr.AddReference("Microsoft.Office.Interop.Excel")
import Microsoft.Office.Interop.Excel as Excel

Продолжение следует..
#ТаковПуть

Рассмотрим варианты работы с Excel на Python. Часть 2

4) Так как в Windows есть встроенный интерпретатор C#.
Можно написать на языке C# dll, которая будет взаимодействовать с объектами excel, word и т.д. И при сборке dll указать зависимость с нужной библиотекой:
%WINDIR%\CSC.EXE /r:Microsoft.Office.Interop.Excel.dll "путь к файлу .cs"


Так как интерпретатор CPython не умеет работать с C#, есть 2 варианта:

4.1) Подключиться через библиотеку, которая умеет обрабатывать C#:
pip install pythonnet

Эта библиотека внутри содержит класс clr
import clr


4.2) либо если есть доступ к Visual Studio и он используется для разработки на языке C++ и при этом нет возможности установить IronPython. Необходимо написать обёртку на C++ к C#.
#using "наша dll на cs"

И с компилировать на компиляторе cl
cl /clr /LD "наша обёртка на плюсах.cpp"

Результирующую dll можно будет подключить к python через встроенную библиотеку:
from ctype import CDLL
#ВДзене

Друзья, коротко делюсь мыслями о новых статьях в Дзене


# 4 Создание службы PostgreSQL

Статья может быть полезна при необходимости установки нескольких версий PostgreSQL на одной машине или для персональных настроек.
В статье рассматриваются особенности работы с кодировками в Windows. Только из-за кодировок я бы не рекомендовал никому ставить PostgreSQL на Windows, хотя статья посвящена именно установке на нем.

#PostgreSQL #cmd


#  5 Создание БД PostgreSQL

Данная статья является продолжением предыдущей. Тут описывается создание bat-файла, который будет создавать БД, пользователя, таблицы и заполнять таблицы данными.
Плюс рассматривается установка драйвера и подключение к БД через host+port с помощью pyodbc на Python.

#PostgreSQL #python #pyodbc


P.S.
В других статьях я буду прикреплять готовый bat-файл со всеми необходимыми
установками для поднятия БД, а за разъяснениями работы батника буду ссылаться на эти две статьи.


Предыдущие статьи.
🔥1
#ЧистыйКот

Модульность

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

Модуль в Python — это любой файл с расширением .py. Он может содержать функции, классы и другие объекты, которые можно использовать в других частях программы.

Пакет — это папка, которая содержит файл __init__.py, который призван собирать все модули в папке в единую структуру.

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

Не забывайте разбивать код на модули и пакеты. Это поможет вам создавать более качественный и поддерживаемый код.
#ТаковПуть

Для любителей экзотики, можно писать python скрипты и запускать их на языке VBA.

Для этого необходимо установить плагин ExcelPython и подключить его в редакторе VBA через Tools->References
#ТаковПуть

Присваивания значений переменным

Все примеры ниже приведут к идентичному результату

x = 1
y = 2

x, y = 1, 2
x, y = [1, 2]
x, y = (1, 2)
x, y = {1, 2}
#ТаковПуть

Объединяем списки (list)

fruits = ['яблоко','мандарин']
vegetables = ['лук', 'помидор']

meal = [*fruits, *vegetables]
print(meal)

#Output:
#['яблоко', 'мандарин', 'лук', 'помидор']
👍1
#ТаковПуть

Продолжаем примеры упаковки распаковки переменных

Упаковка в list и dict:

a = [1, 2]
b = {3, 4}
c = (5, 6)

*list_data1, = *a, *b, *c
print(list_data1)
#Output: [1, 2, 3, 4, 5, 6]

*list_data2, = a, b, c
print(list_data2)
#Output: [[1, 2], {3, 4}, (5, 6)]

dict_data = dict(list_data2)

print(dict_data)
#Output: {1: 2, 3: 4, 5: 6}
👍1
#ВДзене

Друзья, коротко делюсь мыслями о новых статьях в Дзене


# 6 Работа с Git на Windows
В своих статьях я часто ссылаюсь на GitLab. Решил написать статью про установку, настройку и работу с Git и GitLab

Думаю, что надо написать ещё несколько статей про Git, CI/CD, ведение документации и автоматизацию с GitLab.

#git


#  7 Создание XLSB файла

Случайно обнаружил, что в интернете вообще нет пояснений, как создавать xlsb файлы на Python. Решил реализовать решение в виде готовой программы.

Скоро выпущу статью про скрапинг террористов, где эту программу применю.

#python #excel #pywin32


#8 Про совместную работу в Jupyter Notebook

Статья написана по памяти. На одной из моих работ было реализовано пространство для совместной работы в Jupyter, решил поделиться решением.

Единое пространство для работы на Python – очень полезная вещь. Как минимум, это позволяет подсматривать за кодингом коллег, что полезно в обучающих целях.

#python #team

Предыдущие статьи.
👍1
#ЧистыйКот

Короткие функции

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

Старайтесь, чтобы ваши функции содержали до 15 строк (а лучше до 5) и выполняли только одну задачу.

К примеру, в моем недавнем проекте я мог бы создать один метод, который бы создавал Application, Workbook и Sheet эксель файла.

def _create_app( self ) -> None:
    self.xl_app = ...
    ...
    self.xl_wb = ...
self.xl_sheet = ...

Но для большей наглядности я разделил три действия на три метода.

def _create_new_app( self ) -> None:     
self.xl_app = ...
self.xl_app.Visible = True
self.xl_app.ScreenUpdating = True

def _create_new_wb( self ) -> None:
self.xl_wb = ...

def _activate_sheet( self ) -> None:
self.xl_sheet = ...
#ВДзене

Друзья, коротко делюсь мыслями о новых статьях в Дзене

Все программы в статьях намеренно написаны в разных архитектурных решениях.

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

# 9 Скрапинг перечня террористов ФЛ

В рамках статьи наполняем эксель файл данными с сайта.

#python #selenium #excel #pywin32

# 10 Скрапинг перечня террористов ЮЛ

В рамках статьи разворачиваем БД, которую наполняем данными с сайта.

#python #selenium #PostgreSQL #pyodbc

# 11 Нахождение террориста в ЧС ФЛ

Показываю интересный подход к поиску человека в ЧС, когда в рамках одного ФИО делаем сотни различных проверок.

#python #excel #re #pyxlsb #pydantic

# 12 Нахождение террориста в ЧС ЮЛ

Показываю немного другой подход к поиску в черном списке.

#python #PostgreSQL #re #pyodbc #pydantic

🎯 В планах: на базе этих программ сделать API, а на базе него web-сервис с UI и авторизацией.

Предыдущие статьи.
#ТаковПуть

Уникальные элементы list. ч.1

Довольно часто требуется получить уникальный набор элементов списка.

Возьмём список:
l = ["Атос", "Портос", "Арамис", "д’Артаньян", "д’Артаньян"]

Самый простой и популярный способ - это получить set элементов:
u = set(l)
print(u)
# Output:
# {'д’Артаньян', 'Арамис', 'Атос', 'Портос'}

Проблема в том, что теряется порядок записей.

Можно проитерироваться по элементам list и добавлять уникальные элементы в другой list:
u = list()
[u.append(k) for k in l if k not in u]
print(u)
# Output:
# ['Атос', 'Портос', 'Арамис', 'д’Артаньян']

Порядок сохранен, но надо заранее создать пустой list.

А можно применить магию. И преобразовать list в dict и вернуть list ключей:
u = [*dict.fromkeys(l)]
print(u)
# Output:
# ['Атос', 'Портос', 'Арамис', 'д’Артаньян']

Результат тот же, а кода меньше.
👍1