#loops #python-2.7 #xlrd
#циклы #python-2.7 #xlrd
Вопрос:
Я пытаюсь понять, является ли это нормальным поведением в xlrd mod или я чем-то злоупотребляю. Вот код:
import xlrd
workbook = xlrd.open_workbook('exceptions v2.xlsm')
worksheet = workbook.sheet_by_name('Sheet1')
num_rows = worksheet.nrows - 1
curr_row = -1
data = []
print 'begin loop'
while curr_row < num_rows:
curr_row = 1
row = worksheet.row(curr_row)
print row
data.append(row)
print 'out of loop'
Когда я запускаю скрипт, он будет печатать begin loop
и out of loop
дважды вместе со всеми данными в моем развернутом листе. Другими словами, этот цикл while выполняется дважды и останавливается. Я бросил raise SystemExit
после печати out of loop
, и скрипт остановился там, где я бы его исключил.
Еще одна мысль: конечное использование заключается в создании списка на python путем добавления каждой строки из Excel в список (здесь я называю это данными), и я заметил, что я не получаю дубликатов в своем списке, хотя я вижу, что операторы печати выполняются дважды.
Комментарии:
1. Этот код вызывается в функции или это весь сценарий? Потому что, если это весь сценарий, похоже, нет причин для того, чтобы он печатал оператор печати дважды. Если это в функции, то имеет смысл, почему у вас нет удвоенных данных, потому что список данных сбрасывается между запусками цикла.
2. Я пробовал это как оба и получал тот же результат. Однако я использовал его как скрипт в нижней части моей реальной программы вместо того, чтобы делать это в новом файле. Когда я открыл новый файл и протестировал его, все работало просто отлично. Но хорошее замечание о сбросе списка, это было полезно. По-видимому, у меня должно быть что-то в моей программе, проходящей через все дважды, и я просто зациклился на xrld, потому что я не очень знаком с этим модом.
Ответ №1:
Ну, я нашел ответ. Проблема была в моих инструкциях импорта.
У меня есть два файла import_kip.py и initialize.py . Я тестировал приведенный выше сценарий xlrd в нижней части initialize.py а затем импортируют initialize.py для import_kip.py а затем импортируют import_kip.py к моему initialize.py файл. Таким образом, по сути, скрипт был запущен обоими import_kip.py и initialize.py . И поскольку скрипт начинался с data = []
, он очищал мой список при каждом запуске, поэтому я не получал дубликатов.
Я знаю, что это сбивает с толку, но, надеюсь, полезно для тех, кто каким-то образом воссоздает это.