Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
🚢VLCC: вторичный рынок на пике десятилетия при рекордном фрахте.
По данным Signal Ocean Ltd. (Week 09, 2026), цены на VLCC на вторичном рынке достигли максимумов за 10 лет.
Пятилетние суда оцениваются выше $120 млн (+17% г/г), десятилетние — свыше $100 млн (+20% г/г).
Фрахтовая конъюнктура остаётся экстремально сильной: маршрут TD3C превышает $200 000/сутки (+440% г/г), индекс BDTI обновил исторический максимум.
В «чистом» сегменте MR USG–Continent вырос на 530% г/г; ставки танкеров типа LR2 и LR1 прибавили около 100% и 80% соответственно.
Спотовое предложение сокращается: доступность танкеров VLCC на TD3 (AG) снизилась на 27% н/н, на TD15 (WAF–China) — на 45% н/н; SuezmaxTD20 (WAF–Europe) — на 30% ниже среднего за 3 месяца.
При этом тонно-мильный спрос на VLCC демонстрирует краткосрочное ослабление н/н на фоне уже экстремальных доходов.
Переоценка активов сопровождается сужением «возрастного дисконта»: разрыв между 5- и 10-летними судами сократился с 25% до 20%.
Покупатели всё активнее рассматривают средневозрастной тоннаж, рассчитывая на сохранение высоких доходов.
С 2027 года усиливаются риски предложения: поставки танкеров типа VLCCв 2027–2028 гг. превысят 20% действующего флота (69 и 70 судов соответственно).
Вопрос устойчивости ралли будет зависеть от способности рынка абсорбировать новые мощности на фоне геополитических рисков (включая Ормуз) и трансформации торговых потоков.
📌Signal Ocean Ltd. — британская аналитическая компания, основанная в 2018 году, специализируется на данных и цифровой аналитике фрахтовых рынков.
Компания является частной и принадлежит основателям и венчурным инвесторам.
#VLCC#TankerMarket#SecondHand#FreightRates#ShippingCycle
🚢Глобальный флот требует 46 000 новых судов: цикл судостроения далёк от пика.
Мировой рынок судостроения сохраняет высокий потенциал роста, несмотря на уже рекордный объём заказов.
По оценке Arrow Shipbroking, глобальному флоту потребуется около 46 000 новых судов для обновления и удовлетворения спроса.
При этом текущий портфель заказов уже превышает 180 млн CGT, что соответствует уровням суперцикла прошлых десятилетий.
🔹рынок далёк от насыщения — пик заказов ожидается не ранее середины 2030-х годов,
🔹основным драйвером остаётся замещение стареющего флота и экологические требования,
🔹Китай продолжит доминировать в судостроении, усиливая глобальную производственную базу,
🔹спрос поддерживается структурными факторами — декарбонизация, изменение торговых маршрутов и рост тоннажа.
Для судовладельцев это означает формирование долгосрочного инвестиционного цикла, где конкурентоспособность будет определяться доступом к финансированию и технологиям.
Рынок постепенно разделяется на два уровня: крупные игроки с доступом к капиталу и меньшие участники, ограниченные в возможностях обновления флота.
📌Arrow Shipbroking Group - основана в 2014 г, как частная международная брокерская компания, специализирующаяся на рынках балкерного флота и судостроения. Компания является частной и принадлежит партнёрам-основателям.
#Shipbuilding#Newbuildings#ShippingCycle#DryBulk#MaritimeMarkets
🚢MSI: рынок судоходства - сильные доходы, но растущие циклические риски.
По оценке Maritime Strategies International (MSI), доходность в танкерном и сухогрузном сегментах остаётся повышенной, тогда как контейнерный рынок стабилизировался после волатильного цикла 2021–2023 годов.
Секторные прибыли (индекс с 2023 = 100) показывают лидерство танкеров, при поддержке высоких фрахтов и ограниченного предложения. Акции судоходных компаний демонстрируют восстановление, однако динамика различается по сегментам.
Новые заказы на верфях, как доля действующего флота, остаются наиболее значительными в контейнерном сегменте (особенно крупнотоннажные >7,6k TEU), тогда как у танкеров показатели более умеренные.
При этом доля судов старше 20 лет остаётся заметной в танкерном и балкерном флотах, создавая потенциал для утилизации.
Прогноз чистого прироста флота указывает на ускорение поставок в 2026–2027 гг., особенно в контейнерном сегменте, что усиливает риск профицита.
MSI ожидает постепенную нормализацию годовых TC-ставок и коррекцию цен 5-летних судов после пиковых уровней.
Текущая конфигурация рынка характеризуется сочетанием сильной спотовой конъюнктуры и нарастающего давления со стороны предложения. Ключевым фактором устойчивости цикла станет баланс между поставками новостроя и скоростью списания старого тоннажа.
📌Maritime Strategies International (MSI) — британская аналитическая и консалтинговая компания, основанная в 1987 году, специализируется на стратегическом анализе мировых судоходных рынков. Компания является частной и принадлежит партнёрам-основателям.
#ShippingCycle#MSI#Orderbook#TankerMarket#DryBulk
🚢Danish Ship Finance прогнозирует снижение ставок и стоимости судов.
Копенгагенский кредитор Danish Ship Finance ожидает постепенную нормализацию судоходных рынков и снижение фрахтовых ставок в ключевых сегментах.
По оценке компании, в ближайший период усилится расхождение динамики между различными классами флота, при этом текущие уровни доходности в ряде сегментов не являются устойчивыми. Ослабление ставок может повлечь коррекцию стоимости судов, особенно в классах с крупным портфелем заказов.
Одновременно банк рассматривает предстоящую фазу как возможность для расширения финансирования с фокусом на качественные активы, умеренную долговую нагрузку и долгосрочные чартерные покрытия.
Для рынка это сигнал о переходе от фазы перегрева к более сбалансированной конъюнктуре, где ключевыми факторами станут дисциплина капитала, возраст флота и доступ к финансированию.
📌Danish Ship Finance A/S - датская специализированная финансовая компания, основанная в 1961 г, предоставляет кредиты судоходным компаниям по всему миру. Компания принадлежит группе датских банков и инвесторов.
#ShippingFinance#FreightMarket#VesselValues#DanishShipFinance#ShippingCycle