Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
🚢Karpowership поручает Seatrium новую конверсию FSRU.
Турецкая компания Karpowership, оператор плавучих электростанций, поручила сингапурской Seatrium конверсию нового плавучего терминала хранения и регазификации газа (FSRU).
Контракт стал уже восьмым проектом FSRU, реализуемым Seatrium для Karpowership. Ранее верфь уже выполнила шесть подобных конверсий для турецкого партнёра. Проект предполагает преоборудование СПГ-танкера в FSRU с возможностью дальнейшей интеграции с плавучими энергетическими установками Powership.
Соглашение развивает рамочный меморандум, подписанный компаниями в 2025 г, который предусматривает конверсию и модернизацию СПГ-танкеров, а также интеграцию 4-х новых Powership с опционом ещё 2-х единиц.
По данным компании, Seatrium участвовала более чем в 90% мировых проектов конверсии FSU/FSRU, что укрепляет её позиции на быстрорастущем рынке СПГ-инфраструктуры и проектов "LNG-to-power".
Для морского рынка это подтверждает устойчивый спрос на FSRU-решения, которые позволяют быстро создавать импортную газовую инфраструктуру без строительства стационарных терминалов.
📌Seatrium Ltd. — сингапурская морская и офшорная инженерная компания, образованная в 2023 году после объединения Sembcorp Marine и Keppel Offshore & Marine.
Основным акционером является государственный инвестиционный фонд Temasek Holdings.
#LNG#FSRU#Seatrium#Karpowership#EnergyInfrastructure
🚢Jan De Nul расширяет флот двумя судамидля прокладки подводных кабелей.
Бельгийская морская группа Jan De Nul объявила о расширении флота за счёт двух специализированных судов для подводных кабельных работ.
Одно судно будет построено как новострой, второе — получено в результате конверсии существующего флота.
Новое судно для прокладки кабельных траншей будет построено по проекту Ulstein на верфи China Merchants Heavy Industry (CMHI).
Судно сможет работать на био-топливе и зелёном метаноле и будет оснащено технологиями "ultra-low emission" (ULEv). Его основная задача — укладка и закапывание подводных кабелей на глубину до 5 метров. Поставка запланирована на 2028 год.
Дополнительно компания проведёт конверсию водоинжекционного дноуглубителя “Henry Darcy” в судно поддержки траншеепрокладочных работ. Судно будет оснащено подводным роботом для укладки кабелей на мелководье, разработанным британской компанией Osbit.
Для офшорного рынка это отражает рост спроса на специализированный флот для строительства и обслуживания морских ветроэнергетических проектов и подводной энергетической инфраструктуры.
📌Jan De Nul Group — бельгийская морская инженерная компания, основанная в 1938 году, специализируется на дноуглубительных работах, офшорной энергетике и подводной инфраструктуре. Компания является частной и принадлежит семье Jan De Nul.
#OffshoreWind#SubseaCables#JanDeNul#Trenching#EnergyInfrastructure
🚀 Bosnia-Herzegovina Advances Gas Pipeline Project Linked to Trump-Associated Firm
Bosnia-Herzegovina has initiated the process of awarding a strategic gas pipeline project to a company reportedly connected to U.S. President Donald Trump. Bloomberg posted on X, highlighting the significance of this development in the region's energy infrastructure. The project aims to enhance energy security and diversify gas supply sources, aligning with broader regional energy strategies. Details about the company's involvement and the project's timeline remain limited, but the move underscores Bosnia-Herzegovina's efforts to strengthen its energy sector.
#BosniaHerzegovina#GasPipeline#TrumpAssociatedFirm#EnergySecurity#RegionalEnergyStrategies#EnergyInfrastructure#DiversifyGasSupply
🚀 Saudi Energy Infrastructure Attacks Impact Oil Production and Exports
Recent attacks on Saudi Arabia's energy infrastructure have significantly disrupted the country's oil production and export systems. According to BlockBeats, sources from the Saudi National News Agency and the Ministry of Energy revealed that the Khurais and Manifa oil fields were targeted, resulting in a daily production decrease of approximately 300,000 barrels each. Additionally, a critical pumping station on the East-West pipeline was damaged, reducing daily oil transport by about 700,000 barrels.
The refining sector has also been affected, with major facilities such as the Jubail Satorp Refinery, Ras Tanura Refinery, Yanbu Samref Refinery, and Riyadh Refinery experiencing disruptions. This has directly impacted the export capacity of refined products to the global market.
Furthermore, a fire at the Juaymah processing facility has disrupted the export of liquefied petroleum gas (LPG) and liquefied natural gas (LNG). The Saudi Ministry of Energy confirmed that the attacks resulted in the death of an industrial security officer and forced the suspension of operations at some energy facilities.
#SaudiEnergy#OilProduction#SaudiArabia#EnergyInfrastructure#OilExports#Khurais#Manifa#EastWestPipeline#RefiningSector#LPG#LNG#JuaymahFacility#EnergyAttacks