Сценарий и функция дважды перебирают данные

Я пытаюсь понять, является ли это нормальным поведением в моде xlrd или я что-то неправильно использую. Вот код:

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 проходит дважды и останавливается. Я бросил rasie SystemExit после печати out of loop, и скрипт остановился там, где я бы его исключил.

Еще одна мысль: конечное использование состоит в том, чтобы создать список в python, добавив каждую строку из excel в список (здесь я называю это данными), и я заметил, что я не получаю дубликаты в своем списке, хотя я вижу операторы печати бег дважды.

Заранее спасибо за мысли.


person user3591468    schedule 02.07.2014    source источник
comment
Этот код вызывается в функции или это весь скрипт? Потому что, если это весь скрипт, кажется, нет причин для того, чтобы он дважды печатал любой оператор печати. Если это функция, то имеет смысл, почему у вас нет двойных данных, потому что список данных сбрасывается между запусками цикла.   -  person Philip Massey    schedule 02.07.2014
comment
Я пробовал это как оба и получил тот же результат. Однако я использовал его как скрипт в нижней части моей реальной программы, а не делал это в новом файле. Когда я открыл новый файл и проверил его, все работало нормально. Но хорошее наблюдение по поводу сброса списка было полезным. По-видимому, у меня должно быть что-то в моей программе, которое проходит все дважды, и я просто зациклился на xrld, потому что я не очень хорошо знаком с этим модом.   -  person user3591468    schedule 02.07.2014


Ответы (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 = [], он очищал мой список каждый раз при запуске, поэтому я не получал дубликатов.

Я знаю, что это сбивает с толку, но, надеюсь, будет полезно для тех, кто каким-то образом воссоздаст это.

person user3591468    schedule 03.07.2014