Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
🚢Танкерный рынок в поиске направления: волатильность усиливается по всем сегментам.
По данным Baltic Exchange, рынок танкеров демонстрирует разнонаправленную динамику: в сегменте VLCC сохраняется высокая неопределённость на фоне кризиса в Ормузском проливе, что ограничивает количество сделок и искажает ценовые ориентиры.
В сегментах LR и MR наблюдается рост ставок на отдельных маршрутах, особенно в Атлантике и США, тогда как средиземноморские направления остаются под давлением.
Сегмент танкеров типа Suezmax демонстрирует умеренную коррекцию с ростом ставок на ключевых направлениях из Ближнего Востока.
С операционной точки зрения, рынок переходит в фазу высокой волатильности: геополитика и маршрутизация становятся ключевыми драйверами, а традиционные бенчмарки теряют точность из-за ограниченного числа сделок.
Для отрасли это означает усиление неопределённости и рост спредов между сегментами, где локальные факторы и доступность тоннажа формируют краткосрочную динамику ставок.
📌Baltic Exchange — основана в 1744 году в Лондоне, ведущая организация по расчёту фрахтовых индексов, принадлежит Singapore Exchange (SGX).
#Tankers#Shipping#Freight#BalticExchange#Oil
🚢Танкерный рынок сохраняет неопределённость: VLCC под давлением, MR и Aframax выглядят устойчивее.
По данным Baltic Exchange, танкерный рынок завершил неделю разнонаправленно: сегменты перевозки чистых нефтепродуктов и сырой нефти - демонстрируют высокую волатильность, при этом ключевым фактором остаётся неопределённость в районе Ближнего Востока и изменение физического грузопотока.
В нефтепродуктовом сегменте ставки на танкеры типа LR2 на маршруте MEG–Japan удержались в районе WS550, тогда как направление MEG–UK Continent немного укрепилось.
Тип LR1 также показал умеренный рост на маршруте MEG–Japan до WS656.
В MR-сегменте рынок оставался более стабильным: маршруты из Ближнего Востока и Западной Африки удержались на высоких уровнях, а американский рынок демонстрировал смешанную динамику на фоне колебаний арбитражей и предложения тоннажа.
В сегменте крупных нефтетанкеров ситуация менее однозначна.
Рынок супертанкеров типа VLCC в Ближнем Востоке остаётся в зоне повышенной неопределённости: ставки по маршрутам MEG–China и West Africa–China снизились, что указывает на давление со стороны ограниченного числа грузов и осторожности фрахтователей. При этом отдельные трансатлантические направления показывают более устойчивую динамику.
Сегмент танкеров типа Suezmax испытывает давление на маршруте Nigeria–UK Continent, где слабый спрос и избыток доступного тоннажа формируют риск дальнейшего снижения ставок.
В то же время рынок Black Sea–Mediterranean показал укрепление, что отражает локальный дефицит тоннажа и активность по коротким рейсам. Aframax в Атлантике выглядит сильнее благодаря росту ставок из Мексиканского залива и Карибского бассейна.
С отраслевой точки зрения, текущая картина подтверждает фрагментацию танкерного рынка: геополитика поддерживает премию за риск, но отсутствие стабильного физического грузопотока ограничивает потенциал роста. В краткосрочной перспективе наиболее чувствительными останутся танкеры VLCC и Suezmax, тогда как MR и отдельные Aframax-направления сохраняют более устойчивую коммерческую базу.
📌Baltic Exchange — основана в 1744 году, ведущая международная организация по формированию фрахтовых индексов и рыночных оценок в судоходстве, принадлежит Singapore Exchange (SGX).
#tankers#VLCC#freight#shipping#BalticExchange
🚢Baltic Exchange пересматривает методологию ставок из-за кризиса на Ближнем Востоке.
Baltic Exchange инициировала пересмотр методологии расчета фрахтовых индексов для Ближнего Востока на фоне растущей нестабильности в Ормузском проливе.
Ключевое предложение — допустить использование альтернативных портов погрузки за пределами Персидского залива при расчете бенчмарков, сохранив при этом возможность учета традиционных маршрутов, что направлено на повышение гибкости и снижение риска приостановки индексов.
С отраслевой точки зрения изменения отражают беспрецедентное давление геополитики на базовые рыночные инструменты.
Индексы Baltic Exchange используются для расчетов деривативов, физических контрактов и оценки рынка, поэтому их корректность критически важна.
Дополнительно рынок сталкивается с проблемой отсутствия реальных сделок (fixtures), что вынуждает брокеров использовать альтернативные методы оценки, включая сопоставимые маршруты и TCE-модели.
Таким образом, кризис в Ормузе начинает напрямую влиять не только на перевозки, но и на саму архитектуру формирования рыночных бенчмарков.
📌Baltic Exchange — основана в 1744 году, независимая организация, базируется в Лондоне, принадлежит Singapore Exchange (SGX).
#shipping#freight#BalticExchange#markets#risk
🚢Ставки VLCC достигли максимумов со времён нефтяного эмбарго ОПЕК 1973 года.
Индекс ставок для нефтяных танкеров достиг исторического уровня после перенаправления части грузов Saudi Aramco через Красное море и ограничений транзита через Ормузский пролив.
По данным Baltic Exchange, оценка маршрута Ближний Восток – Азия для танкеров типа VLCC достигла Worldscale 465,6, что эквивалентно примерно $481 200 в сутки.
Это самый высокий показатель со времён нефтяного эмбарго ОПЕК 1973 года.
Аналитики Fearnley Securities отмечают, что даже при возможном снижении спроса предложение тоннажа останется ограниченным.
Часть сырья фактически «заперта» в Персидском заливе, а альтернативные маршруты, включая транзит через Красное море и обход Африки, увеличивают расстояние перевозок и усиливают тонно-мильный фактор.
Для танкерного рынка это означает сочетание дефицита доступного флота, резкого роста страховых премий и удлинения рейсов, что поддерживает экстремальные уровни фрахтовых ставок.
📌Fearnley Securities AS — норвежская инвестиционно-аналитическая компания, основанная в 1869 году, специализируется на финансовых и рыночных исследованиях в судоходстве и энергетике. Компания является частной и входит в группу Fearnley.
#VLCC#TankerMarket#FreightRates#BalticExchange#OilShipping
🚢VLCC: спотовые ставки выросли до шестилетнего максимума.
Ключевой индикатор спотового рынка VLCC достиг максимальных значений почти за шесть лет на фоне активного спроса со стороны крупных азиатских фрахтователей на загрузки с Ближнего Востока и Западной Африки.
Индекс спотового TCE (тайм-чартерного эквивалента), публикуемый Baltic Exchange, в пятницу приблизился к уровню $132 000 /сутки. За неделю показатель вырос на 22,8%, что стало самым высоким значением с апреля 2020 года. Средняя спотовая доходность по сегменту превысила отметку $130 000 /сутки.
Рост ставок отражает сжатие доступного предложения тоннажа в сочетании с концентрацией спроса на ключевых экспортных направлениях.
В текущей фазе рынок демонстрирует высокую волатильность и чувствительность к активности азиатских импортеров нефти, что усиливает краткосрочные колебания фрахтовых уровней в классе крупнотоннажных танкеров VLCC.
📌Baltic Exchange — британская организация, основанная в 1744 году в Лондоне, специализируется на публикации фрахтовых индексов и морской рыночной информации. С 2016 года принадлежит биржевой группе Singapore Exchange (SGX).
#VLCC#TankerMarket#FreightRates#BalticExchange#OilShipping
🚢Балкеры типоразмера Panamax: широкий диапазон ставок и активность на трансатлантических маршрутах.
На рынке балкеров типоразмера Panamax сегодня фиксировалась разнонаправленная динамика с диапазоном ставок от $10 500 до $26 500 в сутки в зависимости от региона и направления.
Атлантика демонстрирует более высокие уровни.
Рейсы Аргентина – Франция фиксировались около $26 500, Аргентина – ARAG — порядка $25 500, Нидерланды – Восточное побережье Индии (через USEC) — около $24 500. Трансатлантические направления US Gulf – Германия заключались в районе $18 500 + BB.
Тихоокеанский рынок остаётся стабильным: Австралия – Южный Китай и Австралия – Япония фиксировались в диапазоне $17 000–19 500.
Индийский океан: рейсы Юго-Восточная Азия – Индия проходили на уровнях $12 500–16 500.
Маршруты ECSA продолжают поддерживать ставки благодаря зерновому экспорту из Аргентины и Бразилии, включая сделки с дополнительными бонусами (BB) до $750 000. В целом рынок демонстрирует устойчивость при сбалансированном тоннаж-листе и активной торговле аграрными и угольными грузами.
📌Baltic Exchange — британская морская биржа, основанная в 1744 году и публикующая ключевые фрахтовые индексы мирового судоходства. С 2016 года принадлежит Singapore Exchange (SGX).
#Panamax#DryBulk#FreightRates#ECSA#BalticExchange