200
Глава 10 •
Файлы и исключения
❷
with open(filename) as file_object:
❸
for line in file_object:
print(line)
В точке
имя файла, из которого читается информация, сохраняется в перемен-
ной
filename
. Это стандартный прием при работе с файлами: так как переменная
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
, сохраните строки файла
в списке внутри блока и в дальнейшем работайте с полученным списком. Одни
части файла можно обработать немедленно, а другие отложить для обработки
в будущем.
Чтение из файла
201
В следующем примере строки
pi_digits .txt
сохраняются в списке в блоке
with
, после
чего выводятся за пределами этого блока:
filename = 'pi_digits.txt'
with open(filename) as file_object:
❶
lines = file_object.readlines()
❷
for line in lines:
print(line.rstrip())
В точке
метод
readlines()
последовательно читает каждую строку из файла
и сохраняет ее в списке. Список сохраняется в переменной
lines
, с которой можно
продолжить работу после завершения блока
with
. В точке
в простом цикле
for
выводятся все элементы списка
lines
. Так как каждый элемент
lines
соответствует
ровно
одной строке файла, вывод точно соответствует его содержимому.
Работа
с содержимым файла
После того как файл будет прочитан в память, вы сможете обрабатывать данные
так, как считаете нужным. Для начала попробуем построить одну строку со всеми
цифрами из файла без промежуточных пропусков:
Достарыңызбен бөлісу: