0

суть моего обращения в следующем. Написал данный код, который работал и выводил строку под нужным номером, но после определённой итерации стал выдавать ошибку "list index out of range" с жалобой на строку "f = f.readlines()[N-1]" (Учитывая, что в N вводится число от 1 до 5 соответствующие номеру строки в файле)

А так же хотел попросить подсказать, как сделать, чтобы информация записывалась следом в нужную строку, а не печаталась на новой и как включить готовую строку в существующий изначальный файл.(В данном случае, чтобы в строку добавился новый третий город, который вводит пользователь)

Заранее большое спасибо за помощь.

f = open('план.txt', 'r', encoding= 'utf-8')
print("Исходный список: "+'\n'+ "".join(f))
N = int(input("Введите номер строки: "))
g = str(input("Введите новый город: "))
f = f.readlines()[N-1]
f = f +', '+ g
print(f)

Текст исходного файла:

1;"Магнит";магазин;10000000;Москва, Волгоград
2;"Лента";магазин;80000000;Санкт-Петербург, Самара
3;"Лукойль";АЗС;10000000;Сочи, Анапа
4;"Татнефть";АЗС;90000000;Москва, Санкт-Петербург
5;"Пятерочка";магазин;80000000;Сочи, Ростов-на-Дону
colden
  • 1
  • Файл хорошо бы закрывать. Или открывать через with. А какой номер строки вы вводили, когда ошибка выходила? Покажите ввод и ошибку, иначе это беспредметный разговор. – CrazyElf Jun 03 '22 at 13:20
  • Введите номер строки: 3

    Введите новый город: Москва Traceback (most recent call last):

    File "K:\план\untitled1.py", line 5, in f = f.readlines()[N-1]

    IndexError: list index out of range

    – colden Jun 03 '22 at 13:27
  • А вообще ошибку выводит при вводе любого числа, даже в рамках от 1 до 5 – colden Jun 03 '22 at 13:28
  • 1
    А напечатайте print(f.readlines()), посмотрим, что там, может переводы строки не подхватились, например? – CrazyElf Jun 03 '22 at 13:37
  • Написал принт перед строчкой на которую жалуется, выводит пустой список – colden Jun 03 '22 at 13:48
  • А код точно тот, который вы показали? Я полагаю, что вы один раз открываете файл, а потом в цикле делаете всё остальное. Файл читается один раз, а потом уже не читается, потому что указатель файла достиг конца файла. Либо делайте f.seek(0) перед f.readlines(), либо открывайте файл заново каждую итерацию цикла. – CrazyElf Jun 03 '22 at 13:50
  • Код именно тот, который прикрепил. Специально создал новый файл, где находится только этот код. – colden Jun 03 '22 at 13:51
  • написал "f.seek(0)", теперь в принте выводится список со строками, но ошибка та же. Элементов в списке 5. – colden Jun 03 '22 at 13:53
  • Введите номер строки: 4

    Введите новый город: Москва ['1;"Магнит";магазин;10000000;Москва, Волгоград\n', '2;"Лента";магазин;80000000;Санкт-Петербург, Самара\n', '3;"Лукойль";АЗС;10000000;Сочи, Анапа\n', '4;"Татнефть";АЗС;90000000;Москва, Санкт-Петербург\n', '5;"Пятерочка";магазин;80000000;Сочи, Ростав-на-Дону\n'] Traceback (most recent call last):

    File "K:\план\untitled1.py", line 7, in f = f.readlines()[N-1]

    IndexError: list index out of range

    – colden Jun 03 '22 at 13:53
  • Но думаю, что дальше сам разберусь. Спасибо большое за ответы – colden Jun 03 '22 at 14:02
  • Хотел спросить, как эту строку (уже редактированную, с добавленным городом) внести в исходный файл, чтобы она заменила предыдущую её версию (с двумя городами) – colden Jun 03 '22 at 14:03
  • @colden Похожий вопрос уже задавали вот тут. Я уверен что там вы найдёте ответ на свой вопрос. – quswadress Jun 03 '22 at 14:22
  • Посмотрел, но для своего случая не смог найти. Мне нужно, чтобы он нашёл исходную строку с которой мы работали и заменил её на ту, которая получилась после всех манипуляций. Если это поможет, то старая строка сохранена в переменную k, а новая строка в переменной f. Нужно в файле их заменить. Как это можно сделать? – colden Jun 03 '22 at 15:39

0 Answers0