2013-06-04 29 views
5

Tôi đang sử dụng xlrd để hoạt động trên các tệp xls. Tệp xls của tôi có hai cột và yêu cầu của tôi là đảm bảo cả hai cột đều có số hàng bằng nhau. Tôi đã học được từ help() rằng chúng tôi đã có một row_len() để tìm chiều dài của một hàng được đưa ra với chỉ mục, nhưng không thể tìm thấy bất kỳ cho col_len. bạn có thể xin vui lòng giúp đỡ với bất kỳPython: XLRD; so sánh chiều dài cột

Đây là mã của tôi

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" 

Một số tùy chọn khác ngoài việc so sánh dưới đây xin vui lòng

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

Cảm ơn trả lời @alecxe của bạn. Thay vào đó, thêm vài dòng nữa vào mã của tôi, tôi đã tìm ra điều gì đó bên dưới. vui lòng thông báo điều này sẽ hoạt động ra

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

Có gì sai với 'len (sheet1.col_values ​​(0))'? –

+0

Cảm ơn bạn đã trả lời @MikeMuller. Vì tôi là người mới sử dụng Python, tôi đang cố gắng tìm hiểu tất cả các BIF để tiết kiệm công sức. Chỉ cần tò mò để biết nếu có bất kỳ hiện có trong Python khác hơn 'len (sheet1.col_values ​​(0))'. – Sathy

+1

Chính xác bạn muốn nói gì về độ dài cột? Có thể có các ô trống ở bất kỳ đâu. –

Trả lời

4

Bạn không thể sử dụng len(sheet.col_values(index)) để đo số lượng ô được đặt trong cột (độ dài cột). Độ dài col_values luôn bằng sheet.nrows.

Hãy tưởng tượng bạn có sau trong input.xls:

A B 
1 2 
1 2 
1 2 
1 2 
    2 

Sau đó len(sheet.col_values(0)) sẽ trở lại 5 (cũng như len(sheet.col_values(1))), đó là không chính xác. Nên 4.

Thay vào đó, nó tốt hơn để sử dụng một cái gì đó như thế này:

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 

Hy vọng rằng sẽ giúp.