Я бы порекомендовал создать пустой список, и по мере того, как вы перебираете столбцы, сохраняете каждое из значений там с .append()
, это должно помочь вашему коду немного масштабироваться, хотя я уверен, что будут другие другиеэффективные решения.
Я бы также рекомендовал отказаться от использования ==
для проверки на равенство и попробовать is
, эта ссылка подробно описывает различия: https://dbader.org/blog/difference-between-is-and-equals-in-python
Поэтому ваш код должен выглядеть следующим образом:
...
business_list = ['world wide data', 'other_businesses', 'etc']
for i in range(2, 94000):
if(sheet.cell(row=i, column=6).value is not None):
if(sheet.cell(row=i, column=6).value.lower() in business_list:
sheet.cell(row=i, column=7).value = "World Wide Data"
...
Надеюсь, что это поможет
Изменить, чтобы ответить на комментарии ниже
Таким образом, чтобы ответить на ваш вопрос в комментарии 2, business_list = [...]
что мы создали, будет хранить все , что вы хотите проверить.то есть.если появятся WWD, World Wide Data, 2467 и т. д., то вы можете проверить этот список, а если совпадение найдено - который использует функцию in
- вы можете записать все, что захотите, в столбец 7. (последняя строкакод).
Если вы хотите, чтобы отображались операции Machine, HumanResources или любая из этих других строк, есть несколько способов, которые вы можете выполнить.Простой способ - написать проверку для них следующим образом:
...
business_list = ['world wide data', 'other_businesses', '2467',
'central operations', 'humanresources']
for i in range(2, 50000):
if(sheet.cell(row=i, column=6).value is not None):
if(sheet.cell(row=i, column=6).value.lower() in business_list:
if business_list[i].lower() == "humanresources":
sheet.cell(row = i, column = 7).value = "HumanResources"
if business_list[i].lower() == "machine operations":
sheet.cell(row = i, column = 7).value = "Machine Operations"
else:
sheet.cell(row = i, column = 7).value = "World Wide Data"
...
Чтобы объяснить, что здесь происходит, создается список со значениями, которые вы хотите проверить, которые называются business_list
.Затем вы перебираете свои столбцы и проверяете, что ячейка не пуста с помощью not None:
.Отсюда вы делаете начальную проверку, чтобы увидеть, является ли значение ячейки тем, что вы хотите проверить - in business_list:
, а если это так, - вы используете индекс того, что он нашел, чтобы идентифицировать и обновить значение ячейки.
Это гарантирует, что вы не проверяете что-то, чего может не быть, сначала проверяя список.Так как значения, которые вы предложили, являются один за одним, т.е.HumanResources для человеческих ресурсов, Machine Operations для машинных операций.
Что касается масштабирования, должно быть легко добавить новые проверки, добавив новое название компании в список, а затем двухстрочный оператор if
, тогдаклетка = это.
Я использую аналогичную систему для листа, который составляет примерно 1,2 млн записей, а производительность все еще достаточно высока для производства, хотя я не знаю, насколько сложна ваша.Могут быть и другие, более эффективные способы сделать это, но эта система проста в обслуживании и в будущем, надеюсь, это будет иметь для вас больше смысла.дайте мне знать, если нет, и я помогу, если это возможно
РЕДАКТИРОВАТЬ: Что касается вашего последнего комментария, я бы не предположил что-то подобное без проверки, поскольку это может привести к ложным срабатываниям!