Excel Sheet 上的两个 if 测试条件,使用 xlrd
Two if-test conditions on Excel Sheet, using xlrd
我正在使用以下代码从 Excel 文件中提取数据:
for row in range(sheet.nrows): # For-loop, for all rows
for col in range(sheet.ncols): # For-loop, for all columns
if((re.match(r'F\d-\w*',str(sheet.cell(row,col).value))) and str(sheet.cell(row+2,col).value)!=None): # If cell starts with F(number)-(several word chars) AND if cell two rows below this is not empty
works2.write(num_row+1,num_col,(sheet.cell(row,col)).value)
works2.write(num_row, num_col,(sheet.cell(row-2,col)).value
ect...
这段代码运行良好,直到我将第二个条件添加到 if 测试。我不希望代码读取没有数据的列的任何内容,即第二个 if-test 条件。然而,目前,第二个 if-test 什么都不做,我仍在读取一些空的数据列。有人可以帮我发现我的 error/possibly 重新措辞我的第二个 if 测试,以便它检查单元格 (row, col) 下面的单元格 2 行是否为空,并且只在 if-test 下输入命令,如果它是不是吗?
很抱歉提出这样一个基本问题。我似乎无法让它做我想做的事......
你的第二个条件是错误的,你实际上是在做-
str(sheet.cell(row+2,col).value)!=None)
您正在将 sheet.cell(row+2,col).value
的结果转换为字符串,如果它的 None
str(sheet.cell(row+2,col).value)
的结果将是字符串 'None'
并且这永远不会等于None
,你永远不会从 str()
得到 None
输出。这就是为什么它表现得好像这种情况从未存在过。
你应该试试 -
if (re.match(r'F\d-\w*',str(sheet.cell(row,col).value))) and sheet.cell(row+2,col).value not in [None, '']:
在这个新条件下,sheet.cell(row+2,col).value
和 None
都可以正常工作。
我正在使用以下代码从 Excel 文件中提取数据:
for row in range(sheet.nrows): # For-loop, for all rows
for col in range(sheet.ncols): # For-loop, for all columns
if((re.match(r'F\d-\w*',str(sheet.cell(row,col).value))) and str(sheet.cell(row+2,col).value)!=None): # If cell starts with F(number)-(several word chars) AND if cell two rows below this is not empty
works2.write(num_row+1,num_col,(sheet.cell(row,col)).value)
works2.write(num_row, num_col,(sheet.cell(row-2,col)).value
ect...
这段代码运行良好,直到我将第二个条件添加到 if 测试。我不希望代码读取没有数据的列的任何内容,即第二个 if-test 条件。然而,目前,第二个 if-test 什么都不做,我仍在读取一些空的数据列。有人可以帮我发现我的 error/possibly 重新措辞我的第二个 if 测试,以便它检查单元格 (row, col) 下面的单元格 2 行是否为空,并且只在 if-test 下输入命令,如果它是不是吗?
很抱歉提出这样一个基本问题。我似乎无法让它做我想做的事......
你的第二个条件是错误的,你实际上是在做-
str(sheet.cell(row+2,col).value)!=None)
您正在将 sheet.cell(row+2,col).value
的结果转换为字符串,如果它的 None
str(sheet.cell(row+2,col).value)
的结果将是字符串 'None'
并且这永远不会等于None
,你永远不会从 str()
得到 None
输出。这就是为什么它表现得好像这种情况从未存在过。
你应该试试 -
if (re.match(r'F\d-\w*',str(sheet.cell(row,col).value))) and sheet.cell(row+2,col).value not in [None, '']:
在这个新条件下,sheet.cell(row+2,col).value
和 None
都可以正常工作。