Step 1 (S-15467)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/3363/step/1

S-15467-1.png

До сих пор, всякий раз, когда нам нужно было ввести какие-то пользовательские данные, мы производили чтение с клавиатуры. Во-первых, это не всегда удобно, и во-вторых, наши данные могут хранится в файле. Как прочитать данные из файла? Для начала нужно "подключить" файл к нашей программе. Для этого используется функция open, которая принимает в качестве аргумента имя файла.

S-15467-2.png

По-умолчанию функция open открывает файл только на чтение. С помощью дополнительных параметров можно указать режим работы с файлом. Например, дополнительный параметр 'r' укажет, на то что файл нужно открыть только для чтения.

S-15467-3.png

В обоих случаях открытый файл связывается с переменной inf. Обращаясь к этой переменной, мы можем производить чтение данных из файла. Например, метод readline осуществляет чтение одной строки.

S-15467-4.png

В этом примере мы открыли файл на чтение и прочитали из него две строки, которые поместили в переменные s1 и s2. После того, как работа с файлом завершена, необходимо закрыть его с помощью метода close, чтобы освободить ресурсы.

В Python есть более удобная конструкция, которая позволяет нам не задумываться о том, закрыли мы файл после его использования или нет.

S-15467-5.png

С помощью "with ... as ..." мы связываем функцию, открывающую файл, с именем переменной. Далее во внутреннем блоке кода, мы описываем действия, которые мы хотим выполнить с файлом. Как только, программа выполнит эти инструкции, файл автоматически закроется. После этого с файловой переменной inf работать будет нельзя, доступ к файлу будет закрыт. Этот способ рекомендуется для работы с файлами.

При чтении данных из файла, часто бывает удобно использовать некоторые методы и функции.

S-15467-6.png

Первый из этих методов - strip.

S-15467-7.png

Он используется для того, чтобы убрать все служебные символы, стоящие в начале и конце строки. Дело в том, что при чтении строки из файла, на конце строки имеется символ перевода строки "\n". Помимо этого в начале и конце строки могут находиться символы табуляции или пробела.

S-15467-8.png

Метод strip решает эту проблему, очищая строку, от "лишних" символов.

Другая полезная функция - os.path.join.

S-15467-9.png

Она позволяет построить полный путь к файлу. В качестве аргумента функции open, мы можем передать не только имя файла, но и путь к нему. Для того, чтобы указание пути работало корректно в любой операционной системе, мы на вход os.path.join передаем несколько строк (имен папок и файла), а на выходе функции получаем строку (путь к файлу). Для того, чтобы пользоваться этой функцией, нам необходимо подключить модуль os из стандартной библиотеки.

S-15467-10.png

Тему модулей мы подробно разберем в следующем уроке.

Теперь разберемся с тем, как можно прочитать все строки из файла. Для открытия файла воспользуемся конструкцией "with ... as ...". Далее для чтения из файла мы будем использовать цикл for.

S-15467-11.png

Таким образом, переменная line будет по очереди принимать значения всех строк, в том порядке, в котором они идут в файле. На каждом шаге цикла мы применяем к переменной line метод strip и выводим получившуюся строку на печать. В итоге на стандартном выводе этой программы мы увидим содержимое файла input.txt.

Для того чтобы записать строку в файл, можно использовать метод write. Точно также, как и в случае с чтением из файла, вначале нам необходимо открыть файл на запись. Укажем режим открытия "w" (открыть файл для записи).

S-15467-12.png

Для того, чтобы записать какую-либо строку в файл, нам необходимо вызвать метод write и передать ему строку в качестве параметра. В отличии от функции print, метод write не производит автоматический перенос строк, поэтому мы добавили в конец нашей строки символ "\n". Еще одно отличие от функции print заключается в том, что метод write принимает на вход только строки. И если нам необходимо записать в файл значение другого типа данных, то нам придется вначале преобразовать его в строку. Например, чтобы вывести число 25, мы преобразовали его в строку с помощью функции str. По окончании записи в файл его необходимо закрыть.

Как и в случае с чтением из файла мы можем использовать конструкцию "with ... as ..."

S-15467-13.png