Python: leggere file Excel con XLRD
Traendo spunto da questa utilissima guida…
Supponiamo di avere un file test.xls:
Per leggerne il contenuto con python, utilizziamo xlrd.
Se non è già installato provvediamo:
pip install xlrd
ora importare il modulo:
import xlrd
aprire il file di excel:
>>> workbook = xlrd.open_workbook(r'\tmp\web\python\test.xlsx') >>> workbook <xlrd.book.Book object at 0x030A2DF0>
Per accedere ai nomi dei fogli presenti all’interno del workbook:
>>> workbook.sheet_names() [u'my_sheet_1', u'my_sheet_2']
Per acedere al contenuto dei fogli, possiamo accedere all’oggetto
foglio, o via ID, o via nome.
Tramite ID:
>>> sheet_1 = workbook.sheet_by_index(0) >>> sheet_1 <xlrd.sheet.Sheet object at 0x030AA610> >>> sheet_1.name u'my_sheet_1' >>> sheet_2 = workbook.sheet_by_index(1) >>> sheet_2.name u'my_sheet_2'
Tramite nome:
>>> sheet_1 = workbook.sheet_by_name('my_sheet_1') >>> sheet_1.name u'my_sheet_1'
Per conoscere il numero delle righe non vuote del foglio:
>>> sheet_1.nrows 4
Per stampare i valori presenti in ogni riga:
>>> for row in range(sheet_1.nrows): print sheet_1.row_values(row) [u'ID', u'name'] [1.0, u'abc'] [2.0, u'def'] [3.0, u'xyz']
se volessimo stampare solo i dati di ogni riga, dalla seconda colonna in poi,
potremmo usare l’argomento ‘start_colx’:
>>> for row in range(sheet_1.nrows): print sheet_1.row_values(row, start_colx=1) [u'name'] [u'abc'] [u'def'] [u'xyz']
se volessimo stampare i dati di ogni riga, solo della prima colonna,
potremmo usare l’argomento ‘end_colx’:
>>> for row in range(sheet_1.nrows): print sheet_1.row_values(row, end_colx=1) [u'ID'] [1.0] [2.0] [3.0]
Al contrario, per stampare i valori di ogni cella, partendo dall’intera colonna:
>>> for value in sheet_1.col_values(0): print value ID 1.0 2.0 3.0
Come nel caso delle righe, possiamo restringere la forbice tramite gli argomenti
start_rowx e end_rowx:
Saltando la prima riga:
>>> for value in sheet_1.col_values(0, start_rowx=1): print value 1.0 2.0 3.0
…o escludendo le ultime 2:
>>> for value in sheet_1.col_values(0, end_rowx=2): print value ID 1.0
Per leggere i valori di una singola cella invece, si utilizzano le coordinate della
stessa, sempre partendo a contare da 0.
La Cella A-1 avrà quindi coord. (0,0)
>>> sheet_1.cell_value(0, 0) u'ID' >>> for row in range(sheet_1.nrows): for col in range(sheet_1.ncols): print sheet_1.cell_value(row, col) ID name 1.0 abc 2.0 def 3.0 xyz
Commenti recenti