Excel Sheet中的两个if-test条件,使用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...
这个代码很好地工作,直到我添加第二个条件的iftesting 。 我不想让代码读取任何没有数据的列,即第二个if-test条件。 然而,目前,第二个if-test没有任何作用,而且我还在阅读一些空的数据列。 有人可以帮助我发现我的错误/可能重新措词我的第二,如果testing,以便它检查单元格(row,col)下面的2行是否为空,只有在if-test下input命令,如果不是?
为了提出这样一个基本的问题,抱歉。 我似乎无法得到这个做我想要的…
你的第二个条件是错误的,你实际上是在做 –
str(sheet.cell(row+2,col).value)!=None)
您将sheet.cell(row+2,col).value
的结果转换为string,如果其结果为str(sheet.cell(row+2,col).value)
将是string'None'
并且这永远不会等于None
,你永远不会得到一个None
输出str()
。 这就是为什么它的行为好像条件从来没有。
你应该试试 –
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
。