我正在尝试使用包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

最佳答案

上述两个值不相等,因为它们的类型不同。

假设我有这张桌子:

| Name | Age |
| John | 22  |
| Phil | 25  |


现在,我想读取单元格(2,1)。
 >>> cell1 = sheet.cell(1,0)
 >>> print cell1
 text:u'John'

>>> match_string = "text:u'John'"

现在match_stringcell1出现相同。让我们检查它们是否相等。

>>> cell1 == match_string
 False

他们不平等。让我们检查一下它们是否属于同一类型:

>>> isinstance(cell1, basestring)
 False
 >>> type(cell1)
 <class 'xlrd.sheet.Cell'>

它们的类型不同,因此我们无法进行比较。

解决方案:我们可以使用单元格的value属性进行比较。

>>> cell1_value = cell1.value
 >>> print cell1_value
 u'John'

这是字符串类型,现在可用于与字符串类型进行比较。

>>> cell1_value==u'John'
 True

因此,您可以执行以下操作:
 >>> row[0].value == u'Null'
 True

此方法还可用于比较数字或检查任何条件。

10-06 01:34