Domanda

Io uso xlrd per leggere dati da file excel.

Per gli interi memorizzati nei file, diciamo 63, i xlrd interpreta come 63.0 di tipo number.

Perché non è possibile riconoscere xlrd 63 come un intero?

Si supponga sheet.row(1)[0].value ci dà 63.0. Come posso riconvertirlo in 63.

È stato utile?

Soluzione

Guardando i diversi tipi di cellule nel , sembra che non ci sia alcun tipo integer per le cellule, sono solo galleggia. Quindi, questo è il motivo che stai ricevendo galleggianti indietro, anche quando hai scritto un intero.

Per convertire un galleggiante in un intero solo uso int:

>>> int(63.0)
63
>>> int(sheet.row(1)[0].value)
63

Altri suggerimenti

Excel considera tutti i numeri come galleggianti. In generale, non si preoccupa se your_number % 1 == 0.0 è vero o no.

Esempio: A1 = 63.0, B1 = 63, C1 = INT(A1), A2 = TYPE(A1), B2 = TYPE(B1), C2 = TYPE(C1) You'l vedere che TYPE() restituisce 1 in ogni caso.

Dalla Guida in Excel:

If value is   TYPE returns 
Number        1 
Text          2 
Logical value 4 
Error value   16 
Array         64 

xlrd riporta ciò che trova. xlrd non mangle suo ingresso prima di esporlo a voi. Conversione di una colonna da (62.9, 63.0, 63.1, etc) a (62.9, 63, 63.1, etc) sembrerebbe come un inutile spreco di tempo di CPU per me.

La risposta data da jcollado è bene se si dispone di tutte le voci del foglio di Excel come numeri, che sono interi. Ma supponiamo di avere un numero che è un galleggiante si può sempre mettere una condizione di controllo come -

    if i==int(i): //checking for the integer:
      print int(i)      // solving your problem and printing the integer
    else:
      print i           //printing the float if present

Spero hai trovato utile :)

Mi viene in mente questo gioiello dalla documentazione xlrd:

Le date in fogli di calcolo Excel

In realtà, non ci sono queste cose. Quello che avete sono in virgola mobile numeri e pia speranza.

Lo stesso vale per gli interi. Forse meno la pia speranza.

ho scritto il codice che cerca di convertire i numeri in stringhe come sono visualizzati da Excel. L'approccio funziona lavora almeno per i numeri interi e numeri con due cifre dopo la virgola. Dovrebbe funzionare anche per molti altri formati.

L'idea, le immagini e il codice sono qui: http://uucode.com/blog/2013/10/22/using-xlrd-and-formatting-excel-numbers/

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