Openpyxl:如果当前工作表值与值不匹配,则将列表编号添加到“删除列表”列表

时间:2018-06-17 02:06:36

标签: python openpyxl

我正在阅读excel电子表格,试图删除第一列值与“36.0∞C”或“0.0∞C”不匹配的行。现在我正在尝试创建一个要删除的行列表,所以在我创建温度列(“temperatureList”)中所有温度值的列表后,我可以删除“deleteCellList”列表中的行。这是我的代码:

temperatureList = []
deleteCellList = []
tempRowNumber = 1

while currentRowValue:
    currentRowValue = sheet[(f"B{tempRowNumber}")].value
    print(type(currentRowValue))
    print("Current Row Value")
    print(currentRowValue)
    if currentRowValue != "0.0 ∞C":
        deleteCellList.append(tempRowNumber)
    elif currentRowValue != "18.0 ∞C":
        deleteCellList.append(tempRowNumber)
    else:
        temperatureList.append(currentRowValue)
    tempRowNumber += 1

print("DCL")
print(deleteCellList)

我发现我遇到的问题是这个算法在这里添加了所有可能有5-6个值的单元格,如下面的输出所示:

它不应该看起来如何: DCL [1,2,3,4 .....]

我试图让它看起来像这样:

DCL [45,78,203,408]

我已经尝试打印每个单元格值,返回类似“36.0∞C”的内容,因此我认为没有任何恶意空间可以将其搞砸。话虽这么说,到目前为止,我已经尝试了所有我知道的东西,关于潜在问题/解决方案可能存在的任何直觉?

1 个答案:

答案 0 :(得分:0)

两个澄清以避开:

  1. 你在问题​​中使用了36.0,但在代码示例中使用了18.0 - 我假设代码示例中的18.0是正确的
  2. 您引用“第一列”值,但“B”是第二列,因此我假设您使用的是一个已移过一列的表。
  3. 除了这两个之外,问题在于你如何应用你的逻辑:

    if currentRowValue != "0.0 ∞C":          ## If a value does not equal "0.0 ∞C"
        deleteCellList.append(tempRowNumber)
    elif currentRowValue != "18.0 ∞C":       ## Otherwise (if the value DOES equal "0.0 ∞C"), if the value does not equal "18.0 ∞C"
        deleteCellList.append(tempRowNumber)
    else:                                    ## Otherwise (if the value equals "0.0 ∞C" and also equals "18.0 ∞C")
        temperatureList.append(currentRowValue)
    

    因此,例如“0.0∞C”,“18.0∞C”和“1000.0001∞C”的值:

    • “0.0∞C”=>失败(==“0.0∞C”)=>通过(!=“18.0∞C”)所以添加到deleteCellList
    • “18.0∞C”=>通过(!=“0.0∞C”)所以添加到deleteCellList
    • “1000.0001∞C”=>通过(!=“0.0∞C”)所以添加到deleteCellList

    您要做的是检查值不在的可接受值列表中,因此最简单的解决方法是更改​​逻辑以反映:

    if currentRowValue not in ["0.0 ∞C","18.0 ∞C"]:
        deleteCellList.append(tempRowNumber)
    else:
        temperatureList.append(currentRowValue)
    

    希望有所帮助:)