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

Резултати

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

Пребарај: #comunali

当前筛选 #comunali清除筛选
Tutto Elezioni

@tuttoelezioni · Post #1079 · 25.05.2025 г., 16:40

#Italia🇮🇹 #Comunali ❓Come si vota nei Comuni superiori? Nei comuni superiori (con popolazione superiore ai 15.000 abitanti) è eletto Sindaco al primo turno il candidato che ottiene la maggioranza assoluta dei voti validi; se nessuno raggiunge tale numero, i due candidati più votati accedono a un turno di ballottaggio, dove è eletto chi ottiene più voti. Al ballottaggio è ammesso un collegamento (cd. apparentamento) tra le liste. Alla lista (o al gruppo di liste) collegate al candidato Sindaco eletto sono attribuiti almeno il 60% dei seggi nel Consiglio; gli altri sono attribuiti alle liste perdenti, purché abbiano superato il 3% dei voti, tramite metodo D'Hondt. Si vota: - barrando una lista, in questo caso il voto si estende al candidato Sindaco collegato; - barrando il candidato Sindaco, in questo caso il voto non si estende alle liste collegate; - barrando una lista e il candidato Sindaco collegato; - barrando una lista e un candidato Sindaco non collegato (cd. voto disgiunto). Si possono esprimere fino a due preferenze, purché di genere diverso. @TuttoElezioni

Tutto Elezioni

@tuttoelezioni · Post #1078 · 25.05.2025 г., 16:20

#Italia🇮🇹 #Comunali ❓Come si vota nei Comuni inferiori? Nei Comuni inferiori (con popolazione inferiore ai 15.000 abitanti) è eletto Sindaco il candidato che ottiene il maggior numero di voti e alla sua lista sono assegnati i 2/3 dei seggi nel Consiglio comunale. I seggi attribuiti alle liste perdenti sono assegnati con il metodo D'Hondt. Si vota: - barrando la lista, in questo caso il voto si estende al candidato Sindaco collegato; - barrando il candidato Sindaco, in questo caso il voto si estende alla lista collegata; - barrando la lista e il candidato Sindaco collegato. Nei Comuni inferiori fino a 5.000 abitanti si può esprimere una sola preferenza; in quelli fino a 15.000 abitanti si possono esprimere fino a due preferenze, purché di genere diverso. Non è ammesso il voto disgiunto. N.B.: a differenza dei Comuni superiori, nei Comuni inferiori ad ogni candidato Sindaco è collegata una sola lista. @TuttoElezioni

Tutto Elezioni

@tuttoelezioni · Post #1040 · 25.05.2025 г., 08:00

#Italia🇮🇹 #Comunali I Comuni superiori (ovvero con popolazione superiore ai 15.000 abitanti) al voto oggi sono 32: - Abruzzo (2): Ortona (CH), Sulmona (AQ); - Basilicata (1): Matera; - Calabria (4): Cassano all'Ionio (CS), Isola di Capo Rizzuto (KR), Lamezia Terme (CZ), Rende (CS) - Campania (7): Capaccio Paestum (SA), Casavatore (NA), Giugliano in Campania (NA), Lusciano (CE), Marigliano (NA), Nola (NA), Volla (NA) - Emilia-Romagna (1): Ravenna; - Lazio (3): Ceccano (FR), Fiano Romano (RM), Fonte Nuova (RM); - Liguria (1): Genova; - Lombardia (4): Cernusco sul Naviglio (MI), Desio (MB), Rozzano (MI), Saronno (VA); - Marche (2): Osimo (AN), Sant'Elpidio a Mare (FM); - Puglia (4): Massafra (TA), Orta Nova (FG), Taranto, Triggiano (BA); - Sicilia (1): Palagonia (CT); - Umbria (1): Assisi (PG); - Veneto (1): Santa Maria di Sala (VE). @TuttoElezioni

Tutto Elezioni

@tuttoelezioni · Post #1039 · 25.05.2025 г., 07:10

#Italia🇮🇹 #Comunali 🗳 Urne aperte dalle 07:00 per l'elezione del Sindaco e del Consiglio comunale in 117 comuni, tra i quali Genova, Matera, Ravenna e Taranto. Si voterà fino alle 23; i seggi riapriranno poi nella giornata di domani. @TuttoElezioni

123•••910
ПретходнаСтраница 1 од 10Следна