如何防止变量更改为;无”;如果该字段在python中为空
我正在尝试读取excel文件中的单元格并将其分配给变量。当单元格为空时,问题就出现了。然后给变量分配字符串“None”。我希望它是空白的(“”)。在Python中,有没有一种简单的方法可以在一行中完成这项工作?像这样的如何防止变量更改为;无”;如果该字段在python中为空,python,openpyxl,Python,Openpyxl,我正在尝试读取excel文件中的单元格并将其分配给变量。当单元格为空时,问题就出现了。然后给变量分配字符串“None”。我希望它是空白的(“”)。在Python中,有没有一种简单的方法可以在一行中完成这项工作?像这样的 a = str(sheet.cell(row=3, column=2).value) if (a != "None") else: a = "" 我的目标是在不多次写入(sheet.cell(row=3,column=2).value)的情况下实现这一点。因为我还有很多其他
a = str(sheet.cell(row=3, column=2).value) if (a != "None") else: a = ""
我的目标是在不多次写入(sheet.cell(row=3,column=2).value)的情况下实现这一点。因为我还有很多其他变量要检查,这使得维护变得更加困难。您可以将它分成几行,这样会感觉更好,并且您有几个选项:
res = str(sheet.cell(row=3, column=2).value)
a = "" if res == "None" else res
或其他选项,例如:
a = {"None" : ""}.get(res, res)
如果您有一个值为“None”的单元格,则您的方法是危险的。最具python风格的方式有两行:
v = sheet.cell(row=3, column=2).value
a = str(v) if v is not None else ''
多次写入
sheet.cell(row=3,column=2).value
会导致对sheet对象的不必要访问,因此避免它的目标是好的。但是,你的目标应该是把它写在一行中,而不是把它写好。两行一行的,它们不会取代一个好的旧的“分配然后测试”两行方法:
创建一个生成器并在一个元素列表上迭代,该列表允许分配一个变量,然后在此变量上使用三元,使用next
迭代一次并获得值:
v = next("" if x is None else str(x) for x in [sheet.cell(row=3, column=2).value])
可能更有趣:如果值不能为0,可以使用或:
v = str(sheet.cell(row=3, column=2).value or "")
现在节省一行值得吗?我会让你弄明白的。人们可能会想写v=str(sheet.cell(row=3,column=2.value)或“”)
但是如果单元格中包含数字零,那就不会像预期的那样工作了为什么要转换为字符串?我也更喜欢布尔比较的可读性如果…否则
但是,当然,0也是False
。一般来说,[]
和{}