# Работа с файлами --- ## Запись в файл ---- При работе над реальными проектами очень часто возникает необходимость записать в текстовый файл какие-дибо данные (например мы записываем логи работы нашего приложения). Есть уже готовые решения и библиотеки, но их использование не всегда эффективно, гораздо проще написать разовую функцию на начальных этапах. ---- Чтобы открыть текстовый файл на запись, необходимо применить режим w (перезапись) или a (дозапись). Затем для записи применяется метод write(str), в который передается записываемая строка. Стоит отметить, что записывается именно строка, поэтому, если нужно записать числа, данные других типов, то их предварительно нужно конвертировать в строку. ---- Запишем некоторую информацию в файл "hello.txt": ```python= with open("hello.txt", "w") as file: file.write("hello world") ``` ---- В Python имеется аккуратно встроенный инструмент, применяя который вы можете заметно упростить чтение и редактирование файлов. Оператор with создает диспетчер контекста в Пайтоне, который автоматически закрывает файл для вас, по окончанию работы в нем. Если мы откроем папку, в которой находится текущий скрипт Python, то увидем там файл hello.txt. Этот файл можно открыть в любом текстовом редакторе и при желании изменить. ---- Дозапись выглядит как добавление строку к последнему символу в файле, поэтому, если необходимо сделать запись с новой строки, то можно использовать эскейп-последовательность "\n". Теперь дозапишем в этот файл еще одну строку: ```python= with open("hello.txt", "a") as file: file.write("\ngood bye, world") ``` ---- Еще один способ записи в файл представляет стандартный метод print(), который применяется для вывода данных на консоль: ```python= with open("hello.txt", "a") as hello_file: print("Hello, world", file=hello_file) ``` --- ## Чтение файлов ---- Для чтения файла он открывается с режимом r (Read), и затем мы можем считать его содержимое различными методами: * readline(): считывает одну строку из файла * read(): считывает все содержимое файла в одну строку * readlines(): считывает все строки файла в список ---- Например, считаем выше записанный файл построчно: ```python= with open("hello.txt", "r") as file: for line in file: print(line, end="") ``` ---- Несмотря на то, что мы явно не применяем метод readline() для чтения каждой строки, но в при переборе файла этот метод автоматически вызывается для получения каждой новой строки. Поэтому в цикле вручную нет смысла вызывать метод readline. И поскольку строки разделяются символом перевода строки "\n", то чтобы исключить излишнего переноса на другую строку в функцию print передается значение end="". ---- Теперь явным образом вызовем метод readline() для чтения отдельных строк: ```python= with open("hello.txt", "r") as file: str1 = file.readline() print(str1, end="") str2 = file.readline() print(str2) ``` ---- Если файл небольшой, то его можно разом считать с помощью метода read(): ```python= with open("hello.txt", "r") as file: content = file.read() print(content) ``` ---- И также применим метод readlines() для считывания всего файла в список строк: ```python= with open("hello.txt", "r") as file: contents = file.readlines() str1 = contents[0] str2 = contents[1] print(str1, end="") print(str2) ``` ---- При чтении файла мы можем столкнуться с тем, что его кодировка не совпадает с ASCII. В этом случае мы явным образом можем указать кодировку с помощью параметра encoding: ```python= filename = "hello.txt" with open(filename, encoding="utf8") as file: text = file.read() ``` --- ## Задачи ---- 1. Написать программу, которая записывает значение числа N в файл. Число N вводится с клавиатуры. ---- 2. Написать программу, которая считывает число правильных ответов на тестовой части Олимпиады из файла Olimp.txt (Этот файл необходимо предварительно создать в своей папке в Блокноте и записать в него число правильных ответов). Если дано больше 40 ответов, то программа должна выдавать сообщение, что тесты пройдены, иначе – нет. ---- 3. Написать программу, которая добавляет в текстовый файл Pupils.txt личную карточку учащегося. Программа задает пользователю несколько вопросов (Фамилия, имя, отчество, возраст, школа, класс, телефон). В одной строке создаваемого текстового файла должны находиться как вопрос, так и ответ на этот вопрос. ---- 4. Написать программу, которая записывает последовательность чисел от 15 до -5 в файл Numbers.txt. В каждой строке файла должно находиться единственное число. ---- 5. Напишите программу, которая читает из файла и выводит на экран числа из файла Numbers.txt, сформированного в предыдущей задаче. ---- 6. Дан файл, содержащий два целых числа, записанных через пробел в единственной строке текстового файла. Найти сумму этих чисел и вывести ее на экран. ---- 7. В текстовом файле Invite.txt записано в первой строке имя и фамилия учащегося, а во второй строке время проведения дня открытых дверей в центре КИТ в часах. Необходимо написать программу, которая считывает данные из текстового файла Invite.txt и рисует на экране приглашение на имя этого учащегося. В файл Invite.txt дописывается строка «Выполнено». ---- 8. Доработать программу из предыдущего примера так, чтобы она выводила еще и минуты до начала дня открытых дверей. Минуты также нужно считывать из текстового файла. ---- 9. Доработать программу из предыдущего примера так, чтобы она считывала данные последовательно из нескольких файлов. Имена файлов создаются с именами `Invite№.txt`, где `№` заменяется номером приглашения. Количество файлов с приглашениями вводится с клавиатуры. Программа выводит на экран приглашения для каждого файла.
{"metaMigratedAt":"2023-06-17T02:39:00.452Z","metaMigratedFrom":"Content","title":"Работа с файлами","breaks":true,"contributors":"[{\"id\":\"0d39d5a3-691d-488c-8f1e-1a0fb0be4f13\",\"add\":6370,\"del\":630}]"}
    266 views