2013-05-31 7 views
8

Sto cercando di verificare se una stringa è numerica o non utilizza la funzione isnumerica ma i risultati non sono come previsto. La funzione funziona solo se è una stringa unicode.La funzione numerica di Python funziona solo su unicode

>>> a=u'1' 
>>> a.isnumeric() 
True 
>>> a='1' 
>>> a.isnumeric() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'str' object has no attribute 'isnumeric' 

IsNumeric funziona solo se la sua ragione unicode..Any?

risposta

5

Spesso si consiglia di controllare se una stringa in Python è un numero. Questo si verifica sempre, ad esempio con l'input dell'utente, il recupero dei dati da un database (che può restituire una stringa) o la lettura di un file contenente i numeri . A seconda del tipo di numero che ci si aspetta, è possibile utilizzare diversi metodi. Ad esempio, analizzando la stringa, usando espressioni regolari o , semplicemente provando a eseguire il cast (convertirlo) in un numero e vedere cosa succede . Spesso si incontrano anche numeri non ASCII codificati in Unicode . Questi possono o non possono essere numeri. Ad esempio 2, che è 2 in Thai. Tuttavia, © è semplicemente il simbolo del copyright e ovviamente non è un numero .

link: http://pythoncentral.io/how-to-check-if-a-string-is-a-number-in-python-including-unicode/

12

Solo un nome diverso.

'1'.isdigit() Vero

+0

La stringa 'a' può contenere anche valori float, quindi non è possibile utilizzare isdigit .. – user1050619

+2

u'1.5'.isnumeric() = False, utilizzare isdigit o scrivere la propria funzione. –

4

Secondo la Python documentation, isnumeric è presente solo per oggetti unicode:

I seguenti metodi sono presenti solo su oggetti unicode:

unicode.isnumeric()

Restituisce True se sono presenti solo caratteri numerici in S, False altrimenti. I caratteri numerici includono caratteri numerici e tutti i caratteri che hanno la proprietà del valore numerico Unicode, ad es. U + 2155, VULGAR FRACTION ONE FIFTH.

1

isnumeric() ha esteso il supporto per diversi numeral systems in stringhe Unicode.

Nelle Americhe e in Europa viene utilizzato lo Hindu-Arabic numeral system composto da cifre.

I numeri indù-arabi sono anche chiamati cifre europee da Unicode.

L'sono altri sistemi di numerazione disponibili quali:

  • numeri romani
  • numeri greco antico
  • numeri Tamil
  • numeri Japaneese
  • numeri Chineese
  • numeri coreano

Ulteriori informazioni sui sistemi numerali possono essere trovate qui: wikiwand.com/en/Numerals_in_Unicode#/Numerals_by_script

Unicode subscript, superscript e fractions sono anche considerati numeri validi per la funzione isnumeric().


È possibile utilizzare la funzione IsNumeric() qui sotto per controllare se una stringa è un numero non Unicode.

l = ['abc' + chr(255), 'abc', '123', '45a6', '78b', u"\u2155", '123.4', u'\u2161', u'\u2168'] 

def isnumeric(s): 
    '''Returns True for all non-unicode numbers''' 
    try: 
     s = s.decode('utf-8') 
    except: 
     return False 

    try: 
     float(s) 
     return True 
    except: 
     return False 


for i in l: 
    print i, 'isnumeric:', isnumeric(i) 

print '--------------------' 
print u'\u2169', 'isnumeric', u'\u2169'.isnumeric() 
print u'\u2165', 'isnumeric', u'\u2165'.isnumeric() 

Edit: io aggiornare questo post non appena ho abbastanza reputazione di aggiungere più di 2 link a questa risposta.

Problemi correlati