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



Pdf көрінісі
бет98/238
Дата07.01.2022
өлшемі7,86 Mb.
#18670
түріКнига
1   ...   94   95   96   97   98   99   100   101   ...   238
Байланысты:
2 5343781172763690906

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    Глава 10  •  Файлы и исключения

Также можно точно определить местонахождение файла в вашей системе неза-

висимо от того, где хранится выполняемая программа. Такие пути называются 

абсолютными и используются в том случае, если относительный путь не работает. 

Например, если каталог 

text_files

 находится не в 

python_work

, а в другом каталоге 

(скажем, в каталоге с именем 

other_files

), то передать 

open()


 путь 

'text_files/

filename.txt'

 не получится, потому что Python будет искать указанный каталог 

только внутри 

python_work

. Чтобы объяснить Python, где следует искать файл, не-

обходимо записать полный путь.

Абсолютные пути обычно длиннее относительных, поэтому их лучше сохранять 

в переменных, которые затем передаются 

open()

. В Linux и OS X абсолютные пути 



выглядят так:

file_path = '/home/ehmatthes/other_files/text_files/имя_файла.txt'

with open(file_path) as file_object:

В Windows они выглядят так:

file_path = 'C:\Users\ehmatthes\other_files\text_files\имя_файла.txt'

with open(file_path) as file_object:

С абсолютными путями вы сможете читать файлы из любого каталога вашей си-

стемы. Пока будет проще хранить файлы в одном каталоге с файлами программ 

или в каталогах, вложенных в каталог с файлами программ (таких как 

text_files

 из 

рассмотренного примера).





Достарыңызбен бөлісу:
1   ...   94   95   96   97   98   99   100   101   ...   238




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

    Басты бет