У меня есть длинные списки человекочитаемых строк, некоторые из которых содержат несколько не-ASCII и даже нелатинских символов.Как преобразовать несколько произвольных строк в действительные идентификаторы, читаемые человеком?
'Count €'
'Contains äüöß'
'Y tu mamá también.'
'что'
Но сервис я использую требует, чтобы имена состоят только a-z
, A-Z
, 0-9
, .
, _
, (пробел).
Что представляет собой сжатый способ преобразования их в уникальные имена, действующие в соответствии с этими требованиями?
Мы хотим как можно больше сохранить удобочитаемость. Например, в идеале не меняйте .
на full stop
, и не меняйте &
на u38
. И мы не можем просто отказаться от недопустимых символов или диакритических знаков. Например:
'Count euro symbol'
'Contains a with umlaut u with umlaut o with umlaut sharp s'
'Y tu mama_ tambie_n.'
'cyrillic small letter che ...'
Вот ограничения:
- должен быть Python (2 и 3)
- не должен требовать установки пакета
- должны сохранить uniquishness (это нормально, если есть крайние случаи, где он не делает)
- должно быть кратким
(Примечание:. 'Y tu mama tambien.'
не был бы приемлем, учитывая вероятность нарушения uniquishness ограничения)
Есть несколько параллелей для превращения произвольных строк в допустимые имена классов или идентификаторы.
Большое спасибо. В настоящее время у меня есть что-то похожее на это, используя 'unicode.name', но ваша формулировка более чистая и более сжатая. Я все еще надежду на один лайнер. –
@ A.M.Bittlingmayer: это глупо. Мы разработчики (предположительно), а не профессиональные кодовые игроки. Во всяком случае, вышеприведенный код слишком ** короткий **: у него нет документации, он не работает в оба конца и так далее. Я бы отказался от кода, который я представил в обзоре кода, и завязал разговор с тем, кто его совершил! – DSM
Я не собираюсь запутывать его, но, возможно, есть умный способ сделать это чисто или существующий lib. Посмотрим. –