Запись в текстовый файл
Уроки курсаЗапись в текстовый файл
Методы write() и writelines(): запись строк в файл
Когда файл открыт в режиме 'w' или 'a', для записи данных в него используются два метода файлового объекта: write() и writelines().
Метод write() принимает одну строку и записывает её в файл. Ничего лишнего он не делает — в частности, не добавляет перенос строки в конце. Это принципиальное отличие от print(), к которому ты, скорее всего, привык: print('текст') сам ставит \n после вывода, а write('текст') — нет.
Если не добавить \n явно, все вызовы write() запишут данные в одну непрерывную строку:
with open('log.txt', 'w', encoding='utf-8') as f:
f.write('Первое событие')
f.write('Второе событие')
Файл после этого будет содержать:
Первое событиеВторое событие
Чтобы каждая запись оказалась на отдельной строке, \n нужно вставлять самому:
with open('log.txt', 'w', encoding='utf-8') as f:
f.write('Первое событие\n')
f.write('Второе событие\n')
Теперь файл выглядит так, как ожидается:
Первое событие Второе событие
Метод writelines() принимает не одну строку, а итерируемый объект — обычно список строк — и записывает каждый элемент подряд. По поведению это эквивалентно вызову write() для каждого элемента в цикле: никаких разделителей и переносов между элементами не добавляется.
события = [
'Пользователь вошёл\n',
'Открыт файл config.txt\n',
'Пользователь вышел\n',
]
with open('log.txt', 'w', encoding='utf-8') as f:
f.writelines(события)
Это удобно, когда у тебя уже есть готовый список строк и не хочется писать цикл вручную. Но обрати внимание: \n в конце каждой строки списка — снова твоя ответственность. Если написать 'Пользователь вошёл' без \n, строки в файле снова сольются.
Простое правило: и write(), и writelines() пишут ровно то, что ты передаёшь. Хочешь перенос — передай \n. Хочешь, чтобы строки были на отдельных строках — позаботься об этом сам.
