Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для URL, имени файла, имени объекта в каком-то софте и тд. Требования совместимости простые: в тексте должны быть только допустимые символы. Обычно это a-z, 0-9 и "_" или "-". То есть, только прописные буквы латинского алфавита и цифры (как пример).
Допустим, нам нужно название статьи в блоге преобразовать в slug для добавления его в URL этой статьи. Как это лучше всего сделать?
В Django по умолчанию есть готовая функция slugify для таких случаев.
Но я её никогда не использую. Почему? Потому что её недостаточно!
Приведём пример
>>> from django.utils.text import slugify
>>> slugify('This is a Title')
'this-is-a-title'
Пока всё отлично
>>> slugify('This is a "Title!"')
'this-is-a-title'
Спец символы удалились, всё хорошо.
>>> slugify('Это заголовок статьи')
''
Вот и приехали 😢. Если текст не английский то буквы просто игнорируются. Можно это поправить
>>> slugify('Это заголовок статьи', allow_unicode=True)
'это-заголовок-статьи'
Но тогда мы не вписываемся в условие. У нас появилась кириллица в тексте.
Так как я часто пишу сайты для русскоязычных пользователей эта проблема весьма актуальна. Я не использую стандартную функцию и всегда пишу свою.
Оригинал я не беру в расчёт и пишу полностью свою функцию. И так, по порядку:
🔸1. Исходный текст:
>>> text = 'Мой заголовок №10 😁!'
Взял специально посложней со специальными символами.
🔸2. Транслит
Необходимо сделать транслит всех символов в латиницу. Здесь очень выручает библиотека unidecode. Помимо простого транслита кириллицы в латиницу она умеет преобразовывать спец символы и иероглифы в текстовые аналоги.
from unidecode import unidecode
>>> unidecode("Ñ Σ ® µ ¶ ¼ 月 山")
'N S (r) u P 1/4 Yue Shan'
Очень крутая библиотека, советую👍
В нашем случае получаем такое преобразование:
>>> text = unidecode(text)
>>> print(text)
'Moi zagolovok No. 10 !'
Отличный транслит. Смайл просто удалился, хотя я ждал что-то вроде :). Ну и ладно, всë равно невалидные символы.
А еще наш код уже поддерживает любой язык, будь то хинди или корейский.
🔸4. Фильтр символов
Unidecode не занимается фильтрацией по недопустимым символам. Это мы делаем в следующем шаге через regex. Просто заменим все символы на "_" если они вне указанного диапазона.
>>> text = re.sub(r'[^a-zA-Z0-9]+', '_', text)
>>> print(text)
'Moi_zagolovok_No_10_'
Символ "+" в паттерне выручает когда несколько недопустимых символов идут рядом. Все они заменяются на один символ "_".
🔸5. Slugify
Осталось удалить лишние символы по краям и сделать нижний регистр
>>> text = text.strip('_').lower()
>>> print(text)
'moi_zagolovok_no_10'
Получаем отличный slug! 😎
🌎 Полный код в виде функции.
______________
PS. Проверку что в строке остался хоть один допустимый символ я бы вынес в отдельную функцию.
#libs#tricks#django
🚢Velos Shipping усиливает флот покупкой танкера у Scorpio на фоне нестабильности рынка.
Греческая Velos Shipping, основанная судовладельцем Paschalis Diamantidis, продолжает наращивать флот, приобретя танкер у Scorpio. Сделка стала уже пятой с ноября и увеличила общий флот компании почти до 20 судов (включая балкеры и танкеры).
Рынок M&A в судоходстве сохраняет активность, несмотря на волатильность, вызванную ситуацией на Ближнем Востоке. При этом участники отмечают усложнение сделок — баланс между ожиданиями покупателей и продавцов становится менее предсказуемым.
С операционной точки зрения, стратегия Velos Shipping отражает попытку занять позиции на рынке на фоне циклической неопределённости, используя возможности для покупки активов в условиях ценовой турбулентности.
📌Velos Shipping — греческая судоходная компания, основана в 2019 году предпринимателемPaschalis Diamantidis, находится в частной собственности основателя.
#Shipping#Tankers#DryBulk#Greece#FleetExpansion
🚢Maple Leaf Shipping увеличила флот компании покупкой своего первого балкера типоразмера Newcastlemax.
Китайская Maple Leaf Shipping отметила 70-летие компании - приобретением крупнейшего судна в своей истории — балкера типоразмера Newcastlemax "ES Bright Sea" (206,300 DWT, ex-"Cape Merlin", 2005 г.).
Сделка отражает ускоренную экспансию компании в сегменте Capesize/Newcastlemax, где за последние годы она добавила несколько судов, включая покупки у Zodiac Maritime и Eastern Pacific Shipping.
С операционной точки зрения, компания активно диверсифицирует флот: наряду с балкерами - развивает контейнерный и танкерный сегменты, включая танкеры-химовозы, что позволяет гибко реагировать на рыночные циклы и перераспределение грузопотоков.
Для рынка это сигнал усиления роли частных китайских судовладельцев в крупнотоннажном сегменте и дальнейшей консолидации балкерного флота.
📌Maple Leaf Shipping — основана в 1956 году в Китае, частная судоходная компания, активно развивающая международные перевозки.
Владельцем Maple Leaf Shipping является Йе Чжи (YE ZHI). Он является председателем Maple Leaf Shipping Group, а также вице-президентом Ассоциации молодых предпринимателей Тайчжоу и вице-президентом правления Торговой палаты Чжэцзяна.
#DryBulk#Capesize#Shipping#China#FleetExpansion
🚢Great Eastern Shipping усиливает флот покупкой балкера типоразмера Kamsarmax.
Индийская The Great Eastern Shipping Company (GE Shipping) объявила о покупке балкера типоразмера Kamsarmax, дедвейтом около 81 094 тонн японской постройки (2014 год).
Передача судна ожидается в I-м квартале 2027 финансового года.
Сделка будет полностью профинансирована за счёт собственных средств компании и направлена на увеличение собственного флота.
На данный момент GE Shipping владеет 41 судном совокупным дедвейтом около 3,25 млн тонн: 27 танкеров (включая 5 VLCC, 17 продуктовых танкеров и 5 LPG-танкеров) и 14 балкеров (2 балкера типоразмера Capesize, 9 типоразмера Kamsarmax, 1 типоразмера Ultramax и 2 типоразмера Supramax).
Параллельно компания планирует продать VLGC “Jag Vishnu”, завершение сделки ожидается в IV-м квартале FY26.
По данным компании, текущая загрузка флота близка к 100%, что позволяет активно оптимизировать структуру активов.
Для балкерного рынка покупка указывает на сохраняющийся интерес к типоразмеру Kamsarmax, который остаётся ключевым для перевозок угля, зерна и сырьевых грузов на межрегиональных маршрутах.
📌The Great Eastern Shipping Company Limited — индийская судоходная компания, основанная в 1948 году, одна из крупнейших частных судоходных групп страны.
Акции обращаются на Национальной фондовой бирже Индии (NSE); компания контролируется индийской семьей Шет (Sheth) - это одна из крупнейших частных судоходных компаний в Индии. Ключевыми фигурами в руководстве компании на протяжении многих лет являются представители этой семьи (например, К. М. Шет и Бхарат К. Шет).
Это одна из крупнейших частных судоходных компаний в Индии.
#DryBulk#Kamsarmax#GEShipping#FleetExpansion#ShippingMarkets