Ошибка IndexError: list index out of range, но такой индекс есть!?

вот часть кода:
def read (self):
        base = open(str(self.base_name), 'r')
        base_r = base.readlines()
        base.close()
        dict_r = {}
        tx=0
        while tx <len(base_r)  :
           base_re = base_r[tx]
           st1 = base_re.split (':')
           print ('st - ',st1)
           #print(str(st1[0]),str(st1[1][:-1]))
           dict_r [st1[0]] = str(st1[1])[:-1]
           tx+=1

у меня есть текстовый файл где в каждой строке словарь ,записаный как key:value , st1 это моя строка которую я перебираю и при выводе его в консоль я получаю - ['key', 'value\n'] т.е. все правильно, я разделил строку на до : и после : ,но когда присваиваю dict_r [st1[0]] значение str(st1[1])[:-1] - ошибка , [:-1]для того что бы \n обрезать
  • Вопрос задан
  • 187 просмотров
Решения вопроса 1
hottabxp
@hottabxp Куратор тега Python
Сначала мы жили бедно, а потом нас обокрали..
Скорее всего ошибка в текстовом файле. Возможно нарушена структура файла(например, в одной строке нет двоеточия).
def read (filename):
        base = open(filename, 'r')
        base_r = base.readlines()
        base.close()
        dict_r = {}
        tx=0
        while tx <len(base_r)  :
           base_re = base_r[tx]
           st1 = base_re.split (':')
           print ('st - ',st1)
           # print(str(st1[0]),str(st1[1][:-1]))
           dict_r [st1[0]] = str(st1[1])[:-1]
           tx+=1
        print('*'*20)
        print(dict_r)

read('1.txt')

1.txt
hello:hello2
hello9:hello235345
hello8:hello275
hello7:hello2432
hello6:hello2873

st -  ['hello', 'hello2\n']
st -  ['hello9', 'hello235345\n']
st -  ['hello8', 'hello275\n']
st -  ['hello7', 'hello2432\n']
st -  ['hello6', 'hello2873']
********************
{'hello': 'hello2', 'hello9': 'hello235345', 'hello8': 'hello275', 'hello7': 'hello2432', 'hello6': 'hello287'}


Решение:
Проблема была в том, что в текстовом файле были в конце лишние пустые строки:
5f3f9950515d3060413442.png
В данном случае несколько решений:
1) Делать проверку на наличие пустых строк;
2) Использовать конструкцию try...except;
3) Вручную удалить лишнею пустую строку в конце файла;
4) ...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
SoreMix
@SoreMix Куратор тега Python
yellow
[:-1]для того что бы \n обрезать


https://pythonz.net/references/named/str.strip/
dict_r [st1[0]] = st1[1].strip()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы