2012-11-20 30 views
1

這讓我非常震驚。我錯過了什麼?我的Python中的空字符串檢測?

我想檢測一個Excel工作表中的單元格是否爲空。但是沒有一個測試看起來像我期望的那樣工作。我希望簡單的「不是idkt」測試能夠檢測到空字符串和None,但是不會......實際上,似乎沒有任何測試沒有被檢測到,因爲在第三行中,這是什麼打印。

代碼:

def getFromExcelSheet(): 
    wb = load_workbook("input.xlsx") 
    idkts = []; 
    idktRows = get_worksheet_as_list(wb.get_sheet_by_name('Inputs')) 
    # print "Got these idkts" 
    for row in idktRows: 
     # print row[0] 
     idkt = str(row[2]).strip() 
     filename = str(row[3]).strip() 
     if idkt == None: 
      print "Idkt == none" 

     if idkt is None: 
      print "Idkt is none" 

     if idkt == u"": 
      print "Idkt is ''" 

     if idkt != u"": 
      print "Idkt is !=''" 

     if not idkt: 
      print "not IDKT" 

     if idkt: 
      print "idkt" 

     print idkt 

輸出

Idkt is !='' 
idkt 
3398041577 

Idkt is !='' 
idkt 
3498100937 

Idkt is !='' 
idkt 
None 
+2

它說什麼,如果你'印刷再版(idkt)'就上線? – thebjorn

+0

'3398041577','3498100937',None' –

+0

如果None沒有''',它是一個字符串(而不是'None'常量...) – thebjorn

回答

4

idkt不是空的,它包含單詞'None'的字符串。 這是你的問題:

idkt = str(row[2]).strip() 

row[2]None,當你調用它str成爲'None'。 試試這個:

if idkt == 'None': print 'yay!' 

你會是空虛更好的測試前的字符串轉換:

idkt = str(row[2]).strip() if row[2] else None 
1

的問題是,你轉換細胞的字符串,然後比較Python的None(這不是一個字符串)的結果。

我假設您使用的是openpyxl,在這種情況下,您應該通過.value(例如,)來訪問單元格的值。

idkt = row[2].value 

你將有然後,表示小區內的數據的標準Python對象(str/int/None等)。你應該用你的非空檢查這個值,它會表現你原先預期的方式:

if idkt not in ('', None): # remember bool(0) == False 
    ...