2013-11-26 3 views
-1

Я хочу заменить некоторые значения новыми значениями в текстовом файле. У меня есть список со старыми значениями (c) и список с новыми значениями (iteml). мой код:Почему я получаю ошибку «IndexError: list index out the range»?

def write_file(self): 

    iteml=[] 
    for row in range(152): 
      item=self.model.item(row,1) 
      item.text() 
      text=str(item.text()) 
      iteml.append(text) 



    alt=open("file","r") 
    neu=open("newfile","w") 

    x=0 
    for line in alt: 
     if line[0] == "|": 
      neu.write(line) 
     if line[0] != "|": 
      line=line.replace(c[x],iteml[x]) 
      x=x+1 
      neu.write(line) 

с [] определяется глобальными, и имеет длину 152 элементов, так что я понятия не имеют, почему у "линия = line.replace (с [х], iteml [х])" появляется indexerror.

Когда я использую «print (c)» или «print (iteml)», я получаю весь список ... где моя ошибка?

+3

почему бы вам не печатать й на линии перед вашей ошибкой и увидеть, что его значение ... Im предполагают, что это больше, чем размер массива ... –

+0

Количество строк в файле чтения больше 152, не так ли? – Deck

+0

Да, ты прав. если я печатаю x непосредственно перед ошибкой, x подсчитывает до 152. yep, файл чтения имеет более 152 строк. – Hubschr

ответ

0

C [] может быть длиной 152 элементов, но, как вы итерация альта и приращение х одной в каждой итерации, вполне возможно, что ваш цикл делает больше, чем 152 итераций, потому что это зависит на длину alt.

Возможным решением было бы добавление и если заявление в конце цикла:

if (x == 152): 
    break 

Поэтому, когда ваш цикл достигают итерации Num 152, он закончит свое выполнение, и вы не будете иметь никаких IndexError.

0

Эта проблема связана с тем, что количество элементов в каждом случае не обязательно одинаково, поэтому вы не должны жестко кодировать число, например 152.

Вы отправили этот же код ранее.

Попробуйте работать через мой ответ от этого вопроса: https://stackoverflow.com/questions/20217097/how-to-ignore-following-characters-in-a-line/20217594#20217594

Смежные вопросы