大家好,我需要一些帮助,可能是一件容易的事情,但由于我是编程和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"
进一步说明,or
是boolean
算子。它将表达式before和after转换为boolean
。如果第一个表达式的计算结果为True
,即它不是None
,则返回第一个值,否则返回第二个值,在这种情况下总是True
。
编辑:正如我刚刚意识到的,在某些情况下这是一个潜在的陷阱。由于or
检查真值,因此所有0
、False
和None
都将返回第二个表达式。
逐个检查:
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])