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



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

ПРИМЕЧАНИЕ

Иногда в системах семейства 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    Глава 10  •  Файлы и исключения

for line in lines:



    print(line.rstrip())

В точке  метод 

readlines()

 последовательно читает каждую строку из файла 

и сохраняет ее в списке. Список сохраняется в переменной 

lines


, с которой можно 

продолжить работу после завершения блока 

with

. В точке  в простом цикле 



for

 

выводятся все элементы списка 



lines

. Так как каждый элемент 

lines

 соответствует 



ровно одной строке файла, вывод точно соответствует его содержимому.

Работа с содержимым файла

После того как файл будет прочитан в память, вы сможете обрабатывать данные 

так, как считаете нужным. Для начала попробуем построить одну строку со всеми 

цифрами из файла без промежуточных пропусков:

pi_string.py

filename = 'pi_digits.txt'

with open(filename) as file_object:

lines = file_object.readlines()

pi_string = ''



for line in lines:

    pi_string += line.rstrip()

    


print(pi_string)

print(len(pi_string))

Сначала программа открывает файл и сохраняет каждую строку цифр в списке — 

точно так же, как это делалось в предыдущем примере. В точке  создается пере-

менная 


pi_string

 для хранения цифр числа «пи». Далее следует цикл, который 

добавляет к 

pi_string

 каждую серию цифр, из которой удаляется символ новой 

строки . В точке  программа выводит строку и ее длину:

3.1415926535  8979323846  2643383279 

36

Переменная 



pi_string

 содержит пропуски, которые присутствовали в начале 

каждой строки цифр. Чтобы удалить их, достаточно использовать 

strip()


 вместо 

rstrip()


:

filename = 'pi_30_digits.txt'

with open(filename) as file_object:

lines = file_object.readlines()

pi_string = ''

for line in lines:

    pi_string += line.strip()

    


print(pi_string)

print(len(pi_string))




Чтение из файла    191

В итоге мы получаем строку, содержащую значение «пи» с точностью до 30 знаков. 

Длина строки равна 32 символам, потому что в нее также включается начальная 

цифра 3 и точка:

3.141592653589793238462643383279 

32



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




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

    Басты бет