Книга «Изучаем Python»



Pdf көрінісі
бет113/266
Дата03.03.2023
өлшемі7,86 Mb.
#170986
түріКнига
1   ...   109   110   111   112   113   114   115   116   ...   266
Байланысты:
Изучаем Python. Программирование игр, визуализация данных, веб-приложения ( PDFDrive )


Глава 10 • Файлы и исключения
Чтение всего файла
Для начала нам понадобится файл с несколькими строками текста. Пусть это будет 
файл с числом «пи» с точностью до 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()
, который читает все содер-
жимое файла и сохраняет его содержимое в одной длинной строке в переменной 


Чтение из файла
187
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
Пути к файлам
Если передать функции 
open()
простое имя файла, такое как 
pi_digits .txt
, Python 
ищет файл в том каталоге, в котором находится файл, выполняемый в настоящий 
момент (то есть файл программы 
.py
).
В некоторых случаях (в зависимости от того, как организованы ваши рабочие фай-
лы) открываемый файл может и не находиться в одном каталоге с файлом програм-
мы. Например, файл программы может находиться в каталоге 
python_work
; в ката-
логе 
python_work
создается другой каталог с именем 
text_files
для текстовых файлов, 
с которыми работает программа. И хотя папка 
text_files
находится в 
python_work

простая передача 
open()
имени файла из 
text_files
не подойдет, потому что Python 
проведет поиск файла в 
python_work
и на этом остановится; поиск не будет продол-
жен во вложенном каталоге 
text_files
. Чтобы открыть файлы из каталога, отличного 
от того, в котором хранится файл программы, необходимо указать 
путь
— то есть 
приказать Python искать файлы в конкретном месте файловой системы.
Так как каталог 
text_files
находится в 
python_work
, для открытия файла из 
text_files
можно воспользоваться 
относительным
путем. Относительный путь приказы-
вает Python искать файлы в каталоге, который задается 
относительно
каталога, 
в котором находится текущий файл программы. В системе Linux и OS X это вы-
глядит так:
with open('text_files/
имя_файла
.txt') as file_object:
Эта строка означает, что файл 
.txt
следует искать в каталоге 
text_files
; она предпо-
лагает, что каталог 
text_files
находится в 
python_work
(так оно и есть). В системах 
Windows в путях к файлам вместо слеша (
/
) используется обратный слеш (
\
):
with open('text_files\
имя_файла
.txt') as file_object:


188

Достарыңызбен бөлісу:
1   ...   109   110   111   112   113   114   115   116   ...   266




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет