Как можно улучшить код? [поиск строки в шаблоне, формирование нового файла на основе шаблона]
Изучаю основы питона, решаю задачки. Что-то мне кажется слишком много кода для замены 2х строчек в файле. Посмотрите плз, что можно улучшить и как? Спасибо!
#содержимое файла-шаблона для замены
FIND_1 = ' <h1></h1>\n'
FIND_2 = '\n'
#прием пользовательских данных
name = input('ваше имя: ')
about_me = input('расскажите о себе: ')
#строки на которые надо заменить
string_to_find_1 = f' <h1>{name}</h1>\n'
string_to_find_2 = f'{about_me}\n'
#открываю файл-шаблон и читаю
file_template = open('html_template.txt', 'r', encoding='utf-8')
#методом readlines() читаю шаблон и возвращаю список file_template_list
file_template_list = file_template.readlines()
#ищу первый элемент списка file_template_list для замены
for count, elem in enumerate(file_template_list):
if elem == FIND_1:
#заменяю по индексу
file_template_list[count] = f'{string_to_find_1}'
break
#ищу второй элемент списка file_template_list для замены
for count, elem in enumerate(file_template_list):
if elem == FIND_2:
#заменяю по индексу
file_template_list[count] = f'{string_to_find_2}'
break
#закрываю файл
file_template.close()
#cоздаю файл user_file в режиме записи, записываю в него элементы списка с пользовательскими данными и закрываю файл
user_file = open('user_file.txt', 'w', encoding='utf-8')
for elem in file_template_list:
user_file.write(elem)
user_file.close()
#открываю user_file в режиме чтения, читаю и вывожу в консоль
user_file = open('user_file.txt', 'r', encoding='utf-8')
text = user_file.read()
print(text)
Ответы (1 шт):
Автор решения: n1tr0xs
→ Ссылка
- Можно записать пары
что_заменить - на_что_заменитьв словарь - Для работы с файлами лучше использовать менеджер
with
name = 'name'
about_me = 'about'
repl = {
' <h1></h1>\n' : f' <h1>{name}</h1>\n',
'\n' : f'{about_me}\n',
}
with open('input.txt', 'r', encoding='utf-8') as fin:
lines = fin.readlines()
for i, line in enumerate(lines):
lines[i] = repl.get(line, line)
with open('user_file.txt', 'w', encoding='utf-8') as fout:
for line in lines:
fout.write(line)
with open('user_file.txt', 'r', encoding='utf-8') as fin:
text = fin.read()
print(text)
Далее можно не читать, а после заменять; а сразу читать по строке и добавлять нужный вариант:
name = 'name'
about_me = 'about'
repl = {
' <h1></h1>\n' : f' <h1>{name}</h1>\n',
'\n' : f'{about_me}\n',
}
with open('input.txt', 'r', encoding='utf-8') as fin:
lines = [repl.get(line, line) for line in fin]
with open('user_file.txt', 'w', encoding='utf-8') as fout:
for line in lines:
fout.write(line)
with open('user_file.txt', 'r', encoding='utf-8') as fin:
text = fin.read()
print(text)
Далее можно слить два with в один:
name = 'name'
about_me = 'about'
repl = {
' <h1></h1>\n' : f' <h1>{name}</h1>\n',
'\n' : f'{about_me}\n',
}
with open('input.txt', 'r', encoding='utf-8') as fin,\
open('user_file.txt', 'w', encoding='utf-8') as fout:
for line in fin:
fout.write(repl.get(line, line))
with open('user_file.txt', 'r', encoding='utf-8') as fin:
text = fin.read()
print(text)