这让我大吃一惊。我遗漏了什么?
我正在尝试检测Excel工作表中的单元格是否为空。但是这些测试似乎都没有以我所期望的方式工作。我希望这个简单的"not idkt“测试既可以检测空字符串,也可以不检测任何字符串,但是...实际上,似乎所有的测试都没有检测到,因为在第三行,这就是打印出来的内容。
代码:
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发布于 2012-11-20 16:44:20
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发布于 2012-11-20 16:45:29
问题是您将单元格转换为字符串,然后将结果与Python的None (不是字符串)进行比较。
我假设您使用的是openpyxl,在这种情况下,您应该通过.value访问单元格的值,例如
idkt = row[2].value然后,您将拥有一个标准的Python对象( (str/int/None等)来表示单元格中的数据。您应该将此值用于非空检查,它的行为将与您最初预期的一样:
if idkt not in ('', None): # remember bool(0) == False
...https://stackoverflow.com/questions/13469312
复制相似问题