TGTGInsighttelegram intelligenceLIVE / telegram public index
← Python Заметки

TGINSIGHT SIMILAR POSTS

Најди сличен содржај

Изворен канал @pythonotes · Post #121 · 20 јул.

Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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

Резултати

Пронајдени 1 слични објави

Пребарај: #polansky

当前筛选 #polansky清除筛选
PiaNinoNotovna

@ninonotovna · Post #358 · 19.07.2025 г., 08:14

#piano #Polska #Chopin #Polansky ПИАНИНО И РОЯЛИ. ИСТОРИЯ ШЕСТАЯ: ВЛАДИСЛАВ ШПИЛЬМАН И ЕГО ПИАНИНО https://youtu.be/t81r4PGWdSk?feature=shared Каждый раз, а их было всего два, когда смотрела этот фильм, сердце переворачивалось. «ПИАНИСТ» Романа Полански (Roman Polansky) - это не простая голливудщина, это не очередной внеочередной фильм о холокосте, каких много, и, к сожалению, в большинстве своём, бездарных. Это действительно фильм о Пианисте, но не только. Это и фильм о Пианино (Роялях), которые его спасли. Да! Я готова утверждать, что в этом кино, где прекраснейший артист Эдриан Броуди (Adrien Brody) играл роль польского пианиста Владислава Шпильмана (Wladyslav Szpilman 1911-2000) спасли именно инструменты. И было это, как минимум, дважды: В первый раз, когда он, сходя с ума от голода и одиночества на подпольной квартире, беззвучно играл Полонез Шопена, кажется, на хозяйском пианино. А во второй, когда в развалинах Варшавского гетто, играл на чудом уцелевшем рояле Шопеновскую первую Балладу, благодаря чему и встретил своего спасителя - немецкого офицера Вильгельма Хозенфельда (Wilhelm Adalbert Hosenfeld 1895-1952). Вторая сцена до сих пор трогает меня до слез. Сразу слышу прерывистый голос Мандельштама (никогда его не слышала, правда, но мне кажется, что именно такой голос у него и был). И пророческое это стихотворение написано накануне мирового кошмара, начавшегося вовсе не в 1939м, а в 1933м. К НЕМЕЦКОЙ РЕЧИ Б.С.Кузину Freund! Versäume nicht zu leben: Denn die Jahre fliehn, Und es wird der Saft der Reben Uns nicht lange glühn! Ewald Christian Kleist Себя губя, себе противореча, Как моль летит на огонек полночный, Мне хочется уйти из нашей речи За все, чем я обязан ей бессрочно. Есть между нами похвала без лести И дружба есть в упор, без фарисейства — Поучимся ж серьезности и чести На западе у чуждого семейства. Поэзия, тебе полезны грозы! Я вспоминаю немца— офицера, И за эфес его цеплялись розы, И на губах его была Церера... Еще во Франкфурте отцы зевали, Еще о Гете не было известий, Слагались гимны, кони гарцевали И, словно буквы, прыгали на месте. Скажите мне, друзья, в какой Валгалле Мы вместе с вами щелкали орехи, Какой свободой вы располагали, Какие вы поставили мне вехи. И прямо со страницы альманаха, От новизны его первостатейной, Сбегали в гроб ступеньками, без страха, Как в погребок за кружкой мозельвейна. Чужая речь мне будет оболочкой, И много прежде, чем я смел родиться, Я буквой был, был виноградной строчкой, Я книгой был, которая вам снится. Когда я спал без облика и склада, Я дружбой был, как выстрелом, разбужен. Бог Нахтигаль, дай мне судьбу Пилада Иль вырви мне язык — он мне не нужен. Бог Нахтигаль, меня еще вербуют Для новых чум, для семилетних боен. Звук сузился, слова шипят, бунтуют, Но ты живешь, и я с тобой спокоен. 8— 12 августа 1932 PS Надеюсь, мы будем видеться не только в Валгалле, но и здесь, друзья!:)))) Хорошего дня Вам! Ваша PiaNinoNotovna My Telegram: https://t.me/ninonotovna И не забывайте подписываться! Так общаться будет легче, говорят:))