Как предотвратить изменение переменной на «Нет», если поле в Python пустое - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь прочитать ячейку в файле Excel и назначить ее переменной. Проблема возникает, когда клетка пуста. Затем переменной присваивается строка «Нет». Я хочу, чтобы оно было пустым (""). Есть ли простой способ сделать это в одной строке в Python? Как то так?

  a = str(sheet.cell(row=3, column=2).value) if (a != "None") else: a = ""

Моя цель - добиться этого без записи (sheet.cell (row = 3, column = 2) .value), несколько раз. Так как у меня есть много других переменных для проверки, и это усложняет обслуживание.

Ответы [ 3 ]

0 голосов
/ 28 июня 2018

Ваш подход опасен, если у вас когда-либо есть ячейка со значением «Нет». Самый питонский способ сделать это в двух строках:

v = sheet.cell(row=3, column=2).value
a = str(v) if v is not None else ''

Запись sheet.cell(row=3, column=2).value несколько раз вызывает ненужный доступ к объекту листа, поэтому ваша цель избежать его - хорошая. Однако ваша цель написать это в одну строку должна быть вторичной по отношению к цели написания этого хорошо.

0 голосов
/ 28 июня 2018

Пара однострочников, которые не заменят старый добрый двухстрочный метод «назначить, а затем проверить»:

Создайте генератор и выполните итерации в одноэлементном списке, который позволяет присваивать переменной, затем использовать троичную переменную для этой переменной, используйте next, чтобы выполнить итерацию один раз и получить значение:

v = next("" if x is None else str(x) for x in [sheet.cell(row=3, column=2).value])

Может быть, более интересно: если значения не могут быть 0, вы можете использовать or:

v = str(sheet.cell(row=3, column=2).value or "")

теперь стоит сохранить одну строку? Я дам тебе разобраться.

0 голосов
/ 28 июня 2018

Вы можете разбить его на пару строк, он будет чувствовать себя лучше, и у вас есть несколько вариантов:

res = str(sheet.cell(row=3, column=2).value)
a = "" if res == "None" else res

или другой вариант, например:

a = {"None" : ""}.get(res, res)   
...