2013-06-04 6 views
5

Ich verwende xlrd, um auf xls-Dateien zu arbeiten. Meine xls Datei hat zwei Spalten und meine Anforderung ist sicherzustellen, dass beide Spalten die gleiche Anzahl von Zeilen haben. Ich habe von help() gelernt, dass wir eine row_len() haben, um nach der Länge einer Reihe zu suchen, die mit dem Index gegeben wird, aber keine für col_len finden kann. Können Sie mit jedemPython: XLRD; Vergleichen Sie die Spaltenlänge

Hier helfen bitte meinen Code

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" 

Einige andere Optionen abgesehen von unten zu vergleichen bitte

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

Vielen Dank für Ihre Antwort @alecxe. Anstatt meinem Code mehr Zeilen hinzuzufügen, habe ich unten etwas herausgefunden. Sie berät diese

trainieren
>>> 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

Was ist falsch mit 'len (sheet1.col_values ​​(0))'? –

+0

Danke für Ihre Antwort @MikeMuller. Da ich ein Neuling für Python bin, versuche ich alle BIFs zu lernen, was den Aufwand spart. Nur neugierig zu wissen, ob in Python andere als 'len (sheet1.col_values ​​(0))' existiert. – Sathy

+1

Was genau meinen Sie mit der Spaltenlänge? Es kann überall leere Zellen geben. –

Antwort

4

Sie nicht len(sheet.col_values(index)) zur Messung, wie viele Zellen in der Spalte (Spaltenlänge) eingestellt werden können. col_values Länge ist immer gleich sheet.nrows.

Stellen Sie sich folgendes im input.xls haben:

A B 
1 2 
1 2 
1 2 
1 2 
    2 

Dann len(sheet.col_values(0)) kehrt 5 (sowie len(sheet.col_values(1))), was falsch ist. Stattdessen sollte 4.

sein, ist es besser, etwas zu verwenden:

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 

Hoffnung, das hilft.