2013-06-04 15 views
5

Sto usando xlrd per lavorare su file xls. Il mio file xls ha due colonne e il mio requisito è quello di assicurarmi che entrambe le colonne abbiano lo stesso numero di righe. Ho appreso da help() che abbiamo un row_len() per cercare la lunghezza di una riga data con l'indice, ma non è possibile trovarne uno per col_len. Potete per favore aiutare con qualsiasiPython: XLRD; confronta la lunghezza delle colonne

Ecco il mio codice

from xlrd import open_workbook 
spread_sheet=open_workbook("simple.xls") 
sheet1=spread_sheet.sheet_by_index(0) 

#validates the no of columns in the Spread sheet 
if sheet1.ncols == 2: 
    for sheet1_rows in range(sheet1.nrows): 
    for sheet1_cols in range(sheet1.ncols): 
     value=sheet1.cell(sheet1_rows,sheet1_cols).value 
     source=sheet1.cell(sheet1_rows,0).value 
     destination=sheet1.cell(sheet1_rows,1).value 
    #ignores the Source and Destination Headers 
    if value not in ('Source','Destination'): 
     print "Source is : %s \nDestination is : %s\n" % (source,destination) 
else: 
    print "XLS provided is not valid. Check the no of columns is 2" 

Alcune altre opzioni oltre a confronto i Di seguito viene

>>> print len(sheet1.col_values(0)) 
8 
>>> print len(sheet1.col_values(1)) 
8 

Grazie per la risposta @alecxe. Invece aggiungendo poche altre righe al mio codice, ho scoperto qualcosa di seguito. si prega di avvisare sarà questo lavoro fuori

>>> print len(sheet1.col_values(0)) 
6 
>>> print len(sheet1.col_values(1)) 
6 
>>> sheet1.col_values(0) 
[u'A', 1.0, 1.0, 1.0, 1.0, 2.0] 
>>> sheet1.col_values(1) 
[u'B', 2.0, 2.0, 2.0, 2.0, ''] 
>>> print len(filter(None,sheet1.col_values(1))) 
5 
>>> 
+0

Cosa c'è di sbagliato con 'len (sheet1.col_values ​​(0))'? –

+0

Grazie per la tua risposta @MikeMuller. Dato che sono un novizio di Python, sto cercando di imparare tutti i BIF che risparmiano lo sforzo. Solo curioso di sapere se esiste già in Python oltre a 'len (sheet1.col_values ​​(0))'. – Sathy

+1

Che cosa intendi esattamente per lunghezza della colonna? Ci possono essere celle vuote ovunque. –

risposta

4

Non è possibile utilizzare len(sheet.col_values(index)) per misurare il numero di cellule si trovano in colonna (lunghezza della colonna). col_values la lunghezza è sempre uguale a sheet.nrows.

Immaginate di avere quanto segue nel input.xls:

A B 
1 2 
1 2 
1 2 
1 2 
    2 

Poi len(sheet.col_values(0)) sarà ritorno 5 (così come len(sheet.col_values(1))), che non è corretto. Dovrebbe essere 4.

Invece, è meglio usare qualcosa di simile:

from itertools import takewhile 
import xlrd 


def column_len(sheet, index): 
    col_values = sheet.col_values(index) 
    col_len = len(col_values) 
    for _ in takewhile(lambda x: not x, reversed(col_values)): 
     col_len -= 1 
    return col_len 


book = xlrd.open_workbook("input.xls") 
sheet = book.sheet_by_index(0) 

print column_len(sheet, 0) # prints 4 
print column_len(sheet, 1) # prints 5 

Speranza che aiuta.

Problemi correlati