Проверьте, пусты ли несколько переменных, и замените только те, которые пусты

#python #openpyxl

Вопрос:

Всем привет, мне нужна помощь, возможно, это легко, но, поскольку я новичок в программировании и python, я не доберусь туда, было бы здорово, если бы кто-нибудь мог мне помочь..

Итак, у меня есть несколько переменных, которые я получаю от openpyxl, мне нужно заменить отдельно, если их нет, я попробовал описанный ниже способ, но если одной переменной нет, она заменит их всех, мне нужно заменить только тех, кого нет :

     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
 

Заранее спасибо

Комментарии:

1. Вам нужно проверить каждый по отдельности, и если вы найдете один, то установите его на нет, а не на все одновременно

Ответ №1:

Вы можете просто использовать 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 оператором. Он преобразует выражение до и после в a boolean . Если первое выражение принимает True значение , т. е. это не None так, оно возвращает первое значение, в противном случае возвращается второе значение, которое в этом случае всегда True .

Правка: Потенциальная ловушка для некоторых случаев, как я только что понял. Поскольку or проверка значения истинности, все 0 , False и None приведет к возвращению второго выражения.

Комментарии:

1. Спасибо, это еще больше облегчит мне задачу, я действительно признателен за помощь и прошу прощения за мои плохие знания по этому вопросу.

2. Мы все здесь для того, чтобы учиться. 🙂

Ответ №2:

Проверьте их по отдельности:

 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
 

Комментарии:

1. Спасибо, это работает, я пытался сделать это немного проще, так как у меня около 40 таких переменных, я буду использовать или при назначении переменной (в этом случае мне проще), но я действительно признателен за помощь и прошу прощения за мои плохие знания по этому вопросу.

Ответ №3:

Я бы использовал map следующим образом

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