Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
🚢Цены на газ в Европе возвращаются к пиковым уровням на фоне ударов по инфраструктуре.
Стоимость апрельского фьючерса на хабе TTF в Нидерландах выросла до $854 за тыс. куб. м (€72/МВт·ч), впервые достигнув уровней зимы 2022/2023 годов. За день котировки прибавили более 30%, увеличившись почти на $200.
Резкий рост связан с ударами по газовой инфраструктуре на Ближнем Востоке, что усилило опасения перебоев поставок и спровоцировало реакцию рынка на риск дефицита.
С операционной точки зрения, рынок газа вновь входит в фазу высокой волатильности, где геополитика напрямую формирует ценовые пики. Это усиливает давление на импортёров СПГ и повышает конкуренцию за доступные объёмы.
Для судоходства это означает потенциальный рост ставок в СПГ-сегменте и увеличение длины торговых маршрутов на фоне перераспределения потоков.
📌Title Transfer Facility (TTF) — основан в 2003 году, крупнейший газовый хаб Европы, расположенный в Нидерландах; управляется оператором газовой инфраструктуры Gasunie, находящимся в государственной собственности Нидерландов.
#LNG#Gas#Europe#TTF#Energy
🚢Цены на газ в Европе растут из-за рисков поставок СПГ.
Оптовые цены на газ в Европе продолжили рост на фоне опасений перебоев поставок СПГ из Ближнего Востока.
Усиление напряжённости в регионе и сообщения об атаках на танкеры усилили опасения длительных нарушений логистики.
Бенчмарк TTF (Нидерланды) вырос до €52,40 за МВт·ч (около $17,7 за mmBtu), а британский контракт на ближайший месяц поднялся до 133,12 пенса за терм.
Около 20% мировых поставок СПГ обычно проходит через Ормузский пролив, однако движение судов в этом коридоре почти остановилось после начала военных действий в регионе.
Ситуация усугубилась после объявления форс-мажора со стороны QatarEnergy, одного из крупнейших производителей СПГ.
Дополнительное давление на рынок оказывает низкий уровень европейских газовых запасов — около 29%, что значительно ниже сезонной нормы. Рост цен на нефть также поддерживает газовые котировки, поскольку многие контракты на СПГ и трубопроводный газ индексируются к нефтяным ценам.
Для мировой энергетики это означает усиление конкуренции за доступные СПГ-грузы между Европой и Азией и рост затрат на пополнение газовых хранилищ перед следующим отопительным сезоном.
📌Rabobank — международная банковская и финансовая группа из Нидерландов, основанная в 1898 году. Банк специализируется на финансировании сельского хозяйства, энергетики и сырьевых рынков и принадлежит кооперативной сети региональных банков Нидерландов.
#LNG#GasMarket#TTF#EnergyTrade#Hormuz
🚢Глобальная конкуренция за СПГ усиливается на фоне конфликта вокруг Ирана.
Европейские газовые рынки остаются крайне волатильными после перебоев поставок катарского СПГ.
По данным Intercontinental Exchange (ICE), базовый европейский контракт TTF вырос до €51,75 за МВт·ч, тогда как британский апрельский контракт достиг 133,75 пенса за терм.
Кризис связан с остановкой экспорта СПГ из Катара — одного из крупнейших поставщиков, обеспечивающего около 20% мирового рынка. Основной объём катарского газа направляется в Азию, и покупатели региона активно ищут альтернативные поставки.
В результате ряд СПГ-танкеров из США и Нигерии уже перенаправляется в Азию, уменьшая доступность грузов для Европы.
Аналитики отмечают, что Европа может временно компенсировать часть потерь за счёт запасов, однако конкуренция за американский СПГ (LNG) усиливается. По оценке Bernstein, чтобы удержать поставки, европейскому хабу TTF может потребоваться рост цен ещё на 40–50%.
Запасы газа в ЕС остаются ограниченными: около 29,6% против 37,2% год назад. LSEG также снизила прогноз отправки СПГ в Европу в апреле примерно на 400 ГВт·ч в сутки.
Для судоходства это означает перераспределение потоков СПГ в пользу азиатских направлений, увеличение дальних рейсов и рост фрахтовых ставок на газовозы.
📌Intercontinental Exchange (ICE) — международная биржевая группа, основанная в 2000 году, управляет глобальными торговыми площадками энергетических и финансовых деривативов. Компания является публичной и торгуется на Нью-Йоркской фондовой бирже (NYSE: ICE).
#LNG#GasMarkets#TTF#EnergyTrade#GasShipping