В модуле «последовательности» стандартной библиотеки,
string.ascii_letters ## Same as string.ascii_lowercase + string.ascii_uppercase
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
Есть ли подобная константа, которая включала бы все, что считают письмом в unicode?
Вы можете построить собственную константу верхних и нижних букв Unicode с:
import unicodedata as ud
all_unicode = ''.join(unichr(i) for i in xrange(65536))
unicode_letters = ''.join(c for c in all_unicode
if ud.category(c)=='Lu' or ud.category(c)=='Ll')
Это делает строку длиной 2153 символов длиной (узкий Unicode Python Build). Для кода вроде письмо в Unicode_letters
Было бы быстрее использовать набор вместо этого:
unicode_letters = set(unicode_letters)
Строки нет, но вы можете проверить, является ли символ буквой, используя модуль unicodedata
, в частности его функцию category()
.
>>> unicodedata.category(u'a')
'Ll'
>>> unicodedata.category(u'A')
'Lu'
>>> unicodedata.category(u'5')
'Nd'
>>> unicodedata.category(u'ф') # Cyrillic f.
'Ll'
>>> unicodedata.category(u'٢') # Arabic-indic numeral for 2.
'Nd'
Ll
означает "буква, строчный". Lu
означает "буква, заглавный". Nd
означает "цифра, цифра".
Это было бы довольно массивной постоянной. Unicode в настоящее время охватывает более 100 000 различных символов. Так что ответ нет.
Вопрос в том, почему вам это понадобится? Там может быть какой-то другой способ решения того, что ваша проблема с модулем Unicodedata, например.
Обновление: вы можете скачать файлы со всеми именами DataPoint DataPoint и другую информацию из ftp://ftp.unicode.org/ , и делать нагрузки интересных вещей с этим.
Как упоминалось в предыдущих ответах, строка действительно была бы слишком длинной . Таким образом, Вы должны ориентироваться на (а) конкретный(ые) язык(ы).
[ЭДИТ: Я понял, что так и было в моем первоначальном предназначении, и в большинстве случаев, я думаю. Однако, тем временем, Марк Толонен дал хороший ответ на вопрос в том виде, в каком он был задан, поэтому я выбрал его ответ, хотя использовал следующее решение]
Это легко сделать с помощью модуля "locale":
import locale
import string
code = 'fr_FR' ## Do NOT specify encoding (see below)
locale.setlocale(locale.LC_CTYPE, code)
encoding = locale.getlocale()[1]
letters = string.letters.decode(encoding)
с "буквами", представляющими собой 117-символьную односимвольную строку.
Очевидно, что строка.letter зависит не от самого языка, а от кодировки по умолчанию для выбранного кода языка. Установка локали в fr_FR или de_DE или es_ES приведет к обновлению строки string.letters до того же значения (так как все они по умолчанию закодированы в ISO8859-1).
Если вы добавите кодировку к коду языка (de_DE.UTF-8), то для string.letters будет использована кодировка по умолчанию. Это приведет к ошибке UnicodeDecodeError, если вы используете остальную часть вышеуказанного кода.