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

Резултати

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

Пребарај: #weird

当前筛选 #weird清除筛选
Journey to Fluency

@fluencyinenglish · Post #7334 · 21.09.2019 г., 18:51

#weird-truth @fluencyinenglish 🔹Old Funeral Customs: Placing Coins on the Eyes of the Dead @fluencyinenglish At Stillinger Family Funeral Home in Greenfield, Indiana, we get questions all the time about old funeral customs like this one: What’s the meaning of placing coins on the eyes of the dead? Like many customs and traditions, this one goes way back – in this case to the times of Greek mythology. Placing coins on the eyes of the dead was intended to “pay the ferryman”. Let’s take a closer look at this old funeral custom: ❇️Paying the Ferryman @fluencyinenglish According to often accepted interpretations of Greek mythology, it was essential to pay the ferryman. What does this mean? Charon was the name of a mythological boatman who would transport the souls of the departed across the River Styx; in essence, this was a journey from the land of the living to the land of the dead. To ancient Greeks and others, not making this journey meant not passing on to the afterlife, but instead remaining behind to wander the banks of the River Styx. Because Charon needed to be paid for the journey, coins were placed on the body. @fluencyinenglish In the Mouth or On the Eyes? It appears the earliest manifestations of paying the ferryman called for placing a single silver or gold coin under the tongue of the dead. This was called Charon’s Obol (the obolus was a silver coin in ancient Athens, Greece). The custom eventually came to include the alternative practice of placing a coin ON the mouth of the deceased, as opposed to under the tongue. @fluencyinenglish It is not exactly clear when the tradition evolved to include the practice of placing two coins on the eyes of the departed. Modern iterations of this practice may call for placing pennies or quarters on the closed eyes. It is also believed that placing coins on the eyes of the dead was historically done to make sure the eyes remained closed – out of the superstitious fear that looking into the eyes of the deceased would reveal our own death. @fluencyinenglish From Timeless Traditions to Modern Funeral Services While many old funeral traditions – such as placing coins on the eyes of the dead – may be regarded as outmoded superstitions with no basis in fact or science, many people still regard them as comforting customs to help them find peace with the passing. @fluencyinenglish

Hashtags

Страхи мужика

@waitmanfear · Post #2407 · 19.02.2023 г., 10:50

Графический дизайнер Роб Шеридан показал нью-йоркскую неделю высокой моды в стиле «вечно мучающихсядемонов ада, на которых садистски вырезаны произведения боди-арта, пропитанные кровью». Ужасно-прекрасно r/#weird

Hashtags