2013-06-04 19 views
5

Używam xlrd do pracy z plikami xls. Mój plik xls ma dwie kolumny i moim wymaganiem jest upewnienie się, że obie kolumny mają taką samą liczbę wierszy. Nauczyłem się od help(), że mamy row_len(), aby sprawdzić długość wiersza podanego w indeksie, ale nie można znaleźć żadnego dla col_len. Czy możesz pomóc w każdejPython: XLRD; porównaj długość kolumny

Oto mój kod

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" 

Niektóre inne opcje oprócz porównywania Poniżej

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

dzięki za odpowiedź @alecxe. Zamiast dodawać kilka linii do mojego kodu, dowiedziałem się czegoś poniżej. Proszę doradzić to będzie wypracować

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

Co jest nie tak z 'len (sheet1.col_values ​​(0))'? –

+0

Dzięki za odpowiedź @MikeMuller. Ponieważ jestem początkującym użytkownikiem Pythona, staram się nauczyć wszystkich BIF-ów, które oszczędzają wysiłek. Po prostu ciekawy, czy istnieją w Pythonie inne niż 'len (sheet1.col_values ​​(0))'. – Sathy

+1

Co dokładnie masz na myśli przez długość kolumny? Mogą być puste komórki w dowolnym miejscu. –

Odpowiedz

4

Nie można używać len(sheet.col_values(index)) do mierzenia ile komórki są ustawione w kolumnie (długość kolumny). col_values długość jest zawsze równa sheet.nrows.

Wyobraź sobie, że masz następujące w input.xls:

A B 
1 2 
1 2 
1 2 
1 2 
    2 

Następnie len(sheet.col_values(0)) powróci 5 (jak len(sheet.col_values(1))), który jest nieprawidłowy. Powinny być 4.

Zamiast tego, lepiej jest użyć czegoś takiego:

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 

nadzieję, że pomoże.

Powiązane problemy