检查是否有多个变量为空,只替换为空的变量

  • 本文关键字:变量 替换 是否 python openpyxl
  • 更新时间 :
  • 英文 :


大家好,我需要一些帮助,可能是一件容易的事情,但由于我是编程和python的新手,我没有到达那里,如果有人能帮助我,那将是太棒了。

所以我有多个变量,我从openpyxl我需要单独替换,如果他们是None,我尝试下面的方式,但如果一个变量是None它将取代所有的,我需要替换只有那些谁是None:

DU = sheet['B18'].value
bl_n = sheet['G17'].value #on excel is None
incoterm = sheet['B23'].value #on excel is None
transporter = sheet['G23'].value
if None in (bl_n,incoterm,DU, transporter):
bl_n="none"
incoterm="none"
DU ="none"
transporter="none"
else:
DU = sheet['B18'].value
bl_n = sheet['G17'].value
incoterm = sheet['B23'].value
transporter = sheet['G23'].value`

输出:

DU - none
bl_n - none
incoterm - none
transporter - none

我需要什么:

DU - 5555555555555555
bl_n - none
incoterm - none
transporter - x124455714

Thanks in advance

您可以在初始变量赋值时简单地使用or

DU = sheet['B18'].value or "none"
bl_n = sheet['G17'].value or "none" #on excel is None
incoterm = sheet['B23'].value or "none" #on excel is None
transporter = sheet['G23'].value or "none"

进一步说明,orboolean算子。它将表达式before和after转换为boolean。如果第一个表达式的计算结果为True,即它不是None,则返回第一个值,否则返回第二个值,在这种情况下总是True

编辑:正如我刚刚意识到的,在某些情况下这是一个潜在的陷阱。由于or检查真值,因此所有0FalseNone都将返回第二个表达式。

逐个检查:

bl_n = "none" if bl_n is None else bl_n
incoterm = "none" if incoterm is None else incoterm
DU = "none" if DU is None else DU
transporter = "none" if transporter is None else transporter

我将以以下方式使用map

DU,bl_n,incoterm,transporter = map(lambda x: "none" if x is None else x, [DU,bl_n,incoterm,transporter])