我正在尝试使用包XLRD来读取第2行(excel中的第1行)的值,特别是列A.
我知道值是“text:u'NULL”但是如果我尝试编写一个if函数来比较我给出相同值的变量,它就不会将它们识别为相同。
(只是为了解释我的电子表格在我所指的单元格中的值为 Null 但是使用XLRD它将其读作“text:u'NULL”,这很好)
我已经创建了一个我所指的测试示例,因为这很难描述。我的代码第20行的b值肯定是“text:u'NULL'”,所以我不知道为什么它不会将它读作等于b。
import xlrd
book = xlrd.open_workbook("excelscores.xls")
sheet_name = book.sheet_names()[0]
sheet = book.sheet_by_name(sheet_name)
row_no = 1
row = sheet.row(row_no)
## successful test
a = ['lewis','dylan']
b = a[0]
c = 'lewis'
if c == b:
print "c is equal to b"
else:
print "fail"
## test that fails
a = row
b = a[0]
c = "text:u'NULL'"
if c == b:
print "c is equal to b"
else:
print "fail"enter code here
答案 0 :(得分:2)
上述两个值不相等,因为它们的类型不同。
我们说我有这张桌子:
| Name | Age |
| John | 22 |
| Phil | 25 |
现在我想阅读单元格(2,1)
>>> cell1 = sheet.cell(1,0)
>>> print cell1
text:u'John'
>>> match_string = "text:u'John'"
现在match_string
和cell1
显示相同。让我们检查它们是否相等。
>>> cell1 == match_string
False
他们并不平等。我们来检查它们是否属于同一类型:
>>> isinstance(cell1, basestring)
False
>>> type(cell1)
<class 'xlrd.sheet.Cell'>
它们的类型不同,所以我们无法对它们进行比较。
解决方案:我们可以使用单元格的值属性进行比较。
>>> cell1_value = cell1.value
>>> print cell1_value
u'John'
这是类型字符串,现在可用于与字符串类型进行比较。
>>> cell1_value==u'John'
True
所以在你的情况下,你可以这样做:
>>> row[0].value == u'Null'
True
此方法还可用于比较数字或检查任何条件。