#python
#python
Вопрос:
Я буду честен и признаю, что я задал более ранний связанный вопрос, но с тех пор я нашел решение более ранней проблемы и теперь сталкиваюсь с другой проблемой! Я перебираю список для поиска большого текстового файла. Поиск включает в себя получение первой записи списка и использование этой строки (цифр), которая просматривает текстовый файл в поисках этой записи. Скрипт работает нормально до последней итерации / последней записи списка, в результате чего я получаю следующую ошибку в окне cmd…
2014 Apr 25 09:46:58.884 [35] 0x5245 FFFF Rec rst 4444 A
18.84
2014 Apr 25 09:46:58.902 [81] 0x5245 FFFF Rec rst 4444 A
19.62
2014 Apr 25 09:46:58.944 [2B] 0x5245 FFFF Rec rst 4444 A
16.69
Traceback (most recent call last):
File "C:MEAN_val.py", line 361, in <module>
duta()
File "C:MEAN_val.py", line 120, in duta
for word in [framelist[num]]:
IndexError: list index out of range
Exception RuntimeError: RuntimeError('sys.meta_path must be a list of import hoo
ks',) in <bound method Workbook.__del__ of <xlsxwriter.workbook.Workbook object
at 0x0241F2F0>> ignored
Похоже, что функция while num<=len(framelist): не работает и не выходит из цикла, как только число достигает длины списка.
Вот мой частично работающий код…
for root, subFolders, files in chain.from_iterable(os.walk(path) for path in paths):
for filename in files:
if filename.endswith('.txt'):
with open(os.path.join(root, filename), 'r') as fBMA:
searchlinesBMA = fBMA.readlines()
fBMA.close()
num = 0
while num<=len(framelist):
for i, line in enumerate(searchlinesBMA):
for word in [framelist[num]]:
if word in line:
keylineBMA = searchlinesBMA[i-2]
Rline = searchlinesBMA[i 10]
Rline = re.sub('[()]', '', Rline)
valueR = Rline.split()
split = keylineBMA.split()
if split[10] == 'A':
print keylineBMA
print valueR[3]
num =1
break
Спасибо за чтение,
MikG
Комментарии:
1. Индексы в массивах основаны на 0, тогда
len
как это количество, т. Е. На основе 1. Измените его наwhile num < len(framelist):
2. Должно быть
while num < len(framelist):
указано LT, а не LTE3. Есть ли причина, по которой вы просто не делаете
for frame in framelist:
и не избегаете всего этогоnum
? Такжеfor word in [framelist[num]]:
это цикл, который завершается ровно один раз, поэтому он также может быть присваиваниемword = framelist[num]
, если только эти внешние[]
не являются ложными.4. Спасибо всем за ваш совет. К сожалению, даже после изменения на while num < len(framelist): я все еще получаю ту же ошибку. Обычно я подозреваю, что текстовый файл неверен, но это не так. Кажется, что на одной итерации все еще слишком далеко. Есть ли способ чистого выхода при возникновении ошибки?
5. или, скорее, теперь я получаю эту ошибку cmd, если split [10] == ‘A’: IndexError: список индексов вне диапазона. Похоже, что это все еще похожий случай, когда одна итерация слишком далека
Ответ №1:
Вы можете изменить свой код на:
while num<len(framelist)
потому что длина — это просто количество. Если вы начинаете с нуля и переходите к (включая) длину, вы проходите цикл (длина 1) раз
Ответ №2:
Решил чисто выйти из цикла, используя следующий код. Написанный Excel все равно совпадает, поэтому все еще немного не уверен, почему ошибка индекса была там?
except IndexError:
pass
continue