Как читать и записывать несколько строк текстового файла в Python

#python #file #readlines

#python #файл #строки чтения

Вопрос:

Я пытаюсь прочитать и записать несколько строк текстового файла на Python. Моя цель — указать строки, которые я хочу изменить, с помощью ввода, который я даю скрипту. Скрипт работает при указании одной строки, но не с несколькими строками.

Например, допустим, у меня есть этот файл:

 Item 1
Item 2
Item 3
 

При попытке выполнить следующее для одной строки он работает нормально:

 a_file = open("filename.yml", "r")
list_of_lines = a_file.readlines()
list_of_lines[1] = "Item: "   (input('Input: '))   "n"

a_file = open("filename.yml", "w")
a_file.writelines(list_of_lines)
a_file.close()
 

Но я не могу понять, как применить один и тот же ввод для нескольких строк текстового файла.
Что я пробовал, но не сработало:

 a_file = open("filename.yml", "r")
list_of_lines = a_file.readlines()
list_of_lines[1][2] = "Item: "   (input('some input: '))   "n"

a_file = open("filename.yml", "w")
a_file.writelines(list_of_lines)
a_file.close()
 

Комментарии:

1. list_of_lines[1] = ... , list_of_lines[2] = ... ?

2. list_of_lines это список строк вашего файла. Вам нужно перебрать этот список, чтобы получить каждую строку одну за другой. Или вы можете получить доступ к каждой строке с их индексом, начинающимся с 0.

Ответ №1:

Ты используешь for цикл:

 with open('file.txt', 'r') as f:
    list_of_lines = f.readlines()
    t = f"Item {input('some input: ')}n"
    for i in range(len(list_of_lines)):
        if i in [1, 2]:
            list_of_lines[i] = t

with open("file.txt", "w") as f:
    f.writelines(list_of_lines)
 

file.txt :

 Item 1
Item 2
Item 3
 

Ввод:

 some input: hello
 

В результате file.txt :

 Item 1
Item hello
Item hello
 

Вы также можете использовать list понимание с помощью встроенного enumerate метода:

 t = f"Item {input('some input: ')}n"
d = [1, 2]

with open('file.txt', 'r') as f:
    list_of_lines = [t if i in d else v for i, v in enumerate(f)]
    
with open("file.txt", "w") as f:
    f.writelines(list_of_lines)
 

Комментарии:

1. Отличный и подробный ответ. Решил мою проблему и узнал что-то новое сегодня. Большое спасибо!