Чтение всего файла

We use cookies. Read the Privacy and Cookie Policy

Для начала нам понадобится файл с несколькими строками текста. Пусть это будет файл с числом «пи» с точностью до 30 знаков, по 10 знаков на строку:

pi_digits.txt

3.1415926535

8979323846

2643383279

Чтобы опробовать эти примеры, либо введите данные в редакторе и сохраните файл с именем pi_digits.txt, либо загрузите файл из ресурсов книги на странице https://www.nostarch.com/pythoncrashcourse/. Сохраните файл в каталоге, в котором будут храниться программы этой главы.

Следующая программа открывает этот файл, читает его и выводит содержимое на экран:

file_reader.py

with open('pi_digits.txt') as file_object:

. .contents = file_object.read()

. .print(contents)

В первой строке этой программы многое заслуживает вашего внимания. Начнем с функции open(). Чтобы выполнить любые операции с файлом — даже просто вывести его содержимое, — сначала необходимо открыть файл. Функция open() получает один аргумент: имя открываемого файла. Python ищет файл с указанным именем в каталоге, в котором находится файл текущей программы. В данном примере выполняется программа file_reader.py, поэтому Python ищет файл pi_digits.txt в каталоге, в котором хранится file_reader.py. Функция open() возвращает объект, представляющий файл. В данном случае open('pi_digits.txt') возвращает объект, представляющий файл pi_digits.txt. Python сохраняет этот объект в переменной file_object, с которой мы будем работать позднее в программе.

Конструкция с ключевым словом with закрывает файл после того, как надобность в нем отпадет. Обратите внимание: в этой программе есть вызов open(), но нет вызова close(). Файлы можно открывать и закрывать явными вызовами open() и close(); но если из-за ошибки в программе команда close() останется невыполненной, то файл не будет закрыт. На первый взгляд это не страшно, но некорректное закрытие файлов может привести к потере или порче данных. А если функция close() будет вызвана слишком рано, программа попытается работать с закрытым (то есть недоступным) файлом, что приведет к новым ошибкам. Не всегда можно заранее определить, когда нужно закрывать файл, но с приведенной конструкцией Python сделает это за вас. Вам остается лишь открыть файл и работать с ним так, как требуется, надеясь на то, что Python закроет его автоматически в правильный момент.

После того как в программе появится объект, представляющий файл pi_digits.txt, во второй строке программы используется метод read(), который читает все содержимое файла и сохраняет его содержимое в одной длинной строке в переменной contents. При выводе значения contents на экране появляется все содержимое файла:

3.1415926535

8979323846

2643383279

Единственное различие между выводом и исходным файлом — лишняя пустая строка в конце вывода. Откуда она взялась? Метод read() возвращает ее при чтении, если достигнут конец файла. Если вы хотите удалить лишнюю пустую строку, включите вызов rstrip() в команду print:

with open('pi_digits.txt') as file_object:

contents = file_object.read()

. .print(contents.rstrip())

Напомним, что метод rstrip() удаляет все пропуски в конце строки. Теперь вывод точно соответствует содержимому исходного файла:

3.1415926535

8979323846

2643383279