Domanda

Nel modulo "stringa" della libreria standard,

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

è

'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

C'è una costante simile che dovrebbe includere tutto ciò che è considerato una lettera in unicode?

È stato utile?

Soluzione

È possibile costruire il proprio costante di Unicode lettere maiuscole e minuscole con:

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')

Questo fa una lunga stringa di 2153 caratteri (stretto Unicode Python build). Per il codice come letter in unicode_letters sarebbe più veloce di utilizzare un set invece:

unicode_letters = set(unicode_letters)

Altri suggerimenti

Non c'è nessuna stringa, ma è possibile controllare se un carattere è una lettera utilizzando il modulo unicodedata, in particolare la sua funzione di 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 significa "lettera minuscola". Lu significa "lettera maiuscola". Nd significa "numerico cifra".

Questa sarebbe una costante piuttosto massiccia. Unicode copre attualmente più di 100.000 caratteri diversi. Quindi la risposta è no.

La domanda è perché si avrebbe bisogno? Ci potrebbe essere qualche altro modo di risolvere qualunque sia il vostro problema è con il modulo unicodedata, per esempio.

Update: è possibile scaricare i file con tutti i nomi unicode Datapoint e altre informazioni da ftp://ftp.unicode.org / , e fare un sacco di cose interessanti in questo.

Come accennato nelle risposte precedenti, la stringa sarebbe davvero via troppo lungo. Quindi, è necessario indirizzare (a) lingua specifica (s).
[EDIT: ho capito che era il caso per la mia destinazione d'uso originaria, e per la maggior parte degli usi, immagino. Tuttavia, nel frattempo, Mark Tolonen ha dato una buona risposta alla domanda è stato chiesto, così ho scelto la sua risposta, anche se ho usato la seguente soluzione]

Questo è fatto facilmente con il modulo "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)

con "lettere" è una stringa unicode 117 caratteri a lungo.

A quanto pare, string.letters dipende dalla codifica predefinita per il codice della lingua selezionata, piuttosto che sul linguaggio stesso. Impostazione della localizzazione fr_FR o de_DE es_ES o aggiornerà string.letters allo stesso valore (poiché sono tutti codificati in ISO8859-1 di default).

Se si aggiunge una codifica per il codice della lingua (de_DE.UTF-8), la codifica di default verrà utilizzato, invece, per string.letters. Che potrebbe causare un UnicodeDecodeError se è stato utilizzato il resto del codice di cui sopra.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top