Эквивалент, чтобы натянуть ascii_letters для unicode натягивает у питона 2.x?

В модуле «последовательности» стандартной библиотеки,

string.ascii_letters ## Same as string.ascii_lowercase + string.ascii_uppercase

'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

Есть ли подобная константа, которая включала бы все, что считают письмом в unicode?

12
задан emm 24 January 2010 в 09:26
поделиться

4 ответа

Вы можете построить собственную константу верхних и нижних букв 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)
11
ответ дан 2 December 2019 в 19:54
поделиться

Строки нет, но вы можете проверить, является ли символ буквой, используя модуль 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 означает "цифра, цифра".

7
ответ дан 2 December 2019 в 19:54
поделиться

Это было бы довольно массивной постоянной. Unicode в настоящее время охватывает более 100 000 различных символов. Так что ответ нет.

Вопрос в том, почему вам это понадобится? Там может быть какой-то другой способ решения того, что ваша проблема с модулем Unicodedata, например.

Обновление: вы можете скачать файлы со всеми именами DataPoint DataPoint и другую информацию из ftp://ftp.unicode.org/ , и делать нагрузки интересных вещей с этим.

0
ответ дан 2 December 2019 в 19:54
поделиться

Как упоминалось в предыдущих ответах, строка действительно была бы слишком длинной . Таким образом, Вы должны ориентироваться на (а) конкретный(ые) язык(ы).
[ЭДИТ: Я понял, что так и было в моем первоначальном предназначении, и в большинстве случаев, я думаю. Однако, тем временем, Марк Толонен дал хороший ответ на вопрос в том виде, в каком он был задан, поэтому я выбрал его ответ, хотя использовал следующее решение]

Это легко сделать с помощью модуля "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, если вы используете остальную часть вышеуказанного кода.

-1
ответ дан 2 December 2019 в 19:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: