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



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


Глава 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
из 
рассмотренного примера).
ПРИМЕЧАНИЕ
Иногда в системах семейства Windows слеш в пути к файлам интерпретируется правильно . Если вы 
используете Windows, но не получаете ожидаемых результатов, попробуйте использовать символы 
обратного слеша .
Чтение по строкам
В процессе чтения файла часто бывает нужно обработать каждую строку. Воз-
можно, вы ищете некую информацию в файле или собираетесь каким-то образом 
изменить текст, например при чтении файла с метеорологическими данными вы 
обрабатываете каждую строку, у которой в описании погоды встречается слово 
«солнечно». Или, допустим, в новостях вы ищете каждую строку с тегом заголовка 
и заменяете ее специальными элементами форматирования.
Для последовательной обработки каждой строки в файле можно воспользоваться 
циклом 
for
:
file_reader.py
 
filename = 'pi_digits.txt'
 
with open(filename) as file_object:
 
for line in file_object:
print(line)
В точке 

имя файла, из которого читается информация, сохраняется в перемен-
ной 
filename
. Это стандартный прием при работе с файлами: так как переменная 


Чтение из файла
189
filename
не представляет конкретный файл (это всего лишь строка, которая со-
общает Python, где найти файл), вы сможете легко заменить 
'pi_digits.txt'
именем другого файла, с которым вы собираетесь работать. После вызова 
open()
объект, представляющий файл и его содержимое, сохраняется в переменной 
file_object

. Мы снова используем синтаксис 
with
, чтобы поручить Python 
открывать и закрывать файл в нужный момент. Для просмотра содержимого все 
строки файла перебираются в цикле 
for
по объекту файла 

.
На этот раз пустых строк оказывается еще больше:
3.1415926535
8979323846
2643383279
Пустые строки появляются из-за того, что каждая строка в текстовом файле за-
вершается невидимым символом новой строки. Команда 
print
добавляет свой 
символ новой строки при каждом вызове, поэтому в результате каждая строка 
завершается 
двумя
символами новой строки: один прочитан из файла, а другой 
добавлен командой 
print
. Вызов 
rstrip()
в команде 
print
удаляет лишние пу-
стые строки:
filename = 'pi_digits.txt'
with open(filename) as file_object:
for line in file_object:
print(line.rstrip())
Теперь вывод снова соответствует содержимому файла:
3.1415926535 
8979323846 
2643383279
Создание списка строк по содержимому файла
При использовании 
with
объект файла, возвращаемый вызовом 
open()
, доступен 
только в пределах содержащего его блока 
with
. Если вы хотите, чтобы содержимое 
файла оставалось доступным за пределами блока 
with
, сохраните строки файла 
в списке внутри блока и в дальнейшем работайте с полученным списком. Одни 
части файла можно обработать немедленно и отложить другие для обработки 
в будущем.
В следующем примере строки 
pi_digits .txt
сохраняются в списке в блоке 
with
, после 
чего выводятся за пределами этого блока:
filename = 'pi_digits.txt'
with open(filename) as file_object:
 
lines = file_object.readlines()


190

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




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

    Басты бет