При чтении файла возникает IndexError: list index out of range

при выполнении кода :

b_12 = "1"
b_2 = "2"
b_22 = "2"
b_3 = "3"
b_32 = "3"
b_4 = "4"
b_42 = "4"
b_5 = "5"
b_52 = "5"
b_6 = "6"
b_62 = "6"
b_7 = "7"
b_72 = "7"
b_8 = "8"
b_82 = "8"
b_9 = "9"
b_92 = "9"

dir_path = os.path.dirname(os.path.realpath(__file__))
print (dir_path)
path_to_file = dir_path + "/cfg.txt"
 
with open(path_to_file) as file:
    

    b_1 = file.readlines()[1]
    b_12 = file.readlines()[2]
    b_2 = file.readlines()[3]
    b_22 = file.readlines()[4]
    b_3 = file.readlines()[5]
    b_32 = file.readlines()[6]
    b_4 = file.readlines()[7]
    b_42 = file.readlines()[8]
    b_5 = file.readlines()[9]
    b_52 = file.readlines()[10]
    b_6 = file.readlines()[11]
    b_62 = file.readlines()[12]
    b_7 = file.readlines()[13]
    b_72 = file.readlines()[14]
    b_8 = file.readlines()[15]
    b_82 = file.readlines()[16]
    b_9 = file.readlines()[17]
    b_92 = file.readlines()[18]

питон выдаёт ошибку

  File "c:\Users\Александр\Desktop\Qboard Sowftware\main.py", line 35, in <module>
    b_12 = file.readlines()[2]
IndexError: list index out of range 

моя задача была каждой переменной выдать значение каждой строки файла cfg.txt в чём моя ошибка ?


Ответы (1 шт):

Автор решения: Эникейщик

После первого file.readlines() курсор находится в самом конце файла и читать оттуда больше нечего. Поэтому в строчке b_12 = file.readlines()[2] считывается примерно ничего, а у ничего нет второго элемента.

Да и сама идея 18 раз читать файл, мягко скажем, не самая удачная. Во-первых, это медленно, во-вторых, зачем делать 18 раз одно и то же. Считай один раз в переменную и бери уже из этой переменной:

with open(path_to_file) as file: # после этой строчки не нужно делать две пустых
    data = file.readlines()
b_1 = data[1]
и т.д.
→ Ссылка