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



Pdf көрінісі
бет122/266
Дата03.03.2023
өлшемі7,86 Mb.
#170986
түріКнига
1   ...   118   119   120   121   122   123   124   125   ...   266
Байланысты:
Изучаем Python. Программирование игр, визуализация данных, веб-приложения ( PDFDrive )


Глава 10 • Файлы и исключения
борка литературных произведений, не защищенных авторским правом; это превос-
ходный ресурс для разработчиков, которые собираются работать с литературными 
текстами в своих программных проектах.
Прочитаем текст «Алисы в Стране чудес» и попробуем подсчитать количество слов 
в тексте. Мы воспользуемся методом 
split()
, предназначенным для построения 
списка слов на основе строки. Вот как метод 
split()
работает со строкой, содер-
жащей только название книги:
>>> 
title = "Alice in Wonderland"
>>> 
title.split()
['Alice', 'in', 'Wonderland']
Метод 
split()
разделяет строку на части по всем позициям, в которых обнаружит 
пробел, и сохраняет все части строки в элементах списка. В результате создается 
список слов, входящих в строку (впрочем, вместе с некоторыми словами могут 
храниться знаки препинания). Для подсчета слов в книге мы воспользуемся вызо-
вом 
split()
для всего текста, а затем подсчитаем элементы списка, чтобы получить 
примерное количество слов в тексте:
filename = 'alice.txt'
try:
with open(filename) as f_obj:
contents = f_obj.read()
except FileNotFoundError:
msg = "Sorry, the file " + filename + " does not exist."
print(msg)
else:
# Подсчет приблизительного количества строк в файле.
 
words = contents.split()
 
num_words = len(words)
 
print("The file " + filename + " has about " + str(num_words) +
" words.")
Затем я переместил файл 
alice .txt
в правильный каталог, чтобы код в блоке 
try
был выполнен без ошибок. В точке 

программа загружает текст в переменную 
contents
, которая теперь содержит весь текст в виде одной длинной строки и ис-
пользует метод 
split()
для получения списка всех слов в книге. Запрашивая 
длину этого списка при помощи функции 
len()
, мы получаем неплохое при-
ближенное значение количества слов в исходной строке 

. В точке 

выводится 
сообщение с количеством слов, найденных в файле. Этот код помещен в блок 
else
, потому что он должен выводиться только в случае успешного выполнения 
блока 
try
. Выходные данные программы сообщают, сколько слов содержит файл 
alice .txt
:
The file alice.txt has about 29461 words. 
Количество слов немного завышено, потому что в нем учитывается дополнительная 
информация, включенная в текстовый файл издателем, но в целом оно довольно 
точно оценивает длину «Алисы в Стране чудес».


Исключения
201
Работа с несколькими файлами
Добавим еще несколько файлов с книгами для анализа. Но для начала переместим 
основной код программы в функцию с именем 
count_words()
. Это упростит про-
ведение анализа для нескольких книг:
word_count.py
def count_words(filename):
 
"""Подсчет приблизительного количества строк в файле."""
try:
with open(filename) as f_obj:
contents = f_obj.read()
except FileNotFoundError:
msg = "Sorry, the file " + filename + " does not exist."
print(msg)
else:
# Подсчет приблизительного количества строк в файле.
words = contents.split()
num_words = len(words)
print("The file " + filename + " has about " + str(num_words) +
" words.")
filename = 'alice.txt'
count_words(filename)
Б
у
льшая часть кода не изменилась. Мы просто снабдили код отступом и пере-
местили его в тело 
count_words()
. Кроме того, комментарий был преобразован 
в строку документации 

.
Теперь мы можем написать простой цикл для подсчета слов в любом тексте, 
который нужно проанализировать. Для этого имена анализируемых файлов со-
храняются в списке, после чего для каждого файла в списке вызывается функ-
ция 
count_words()
. Мы попробуем подсчитать слова в «Алисе в Стране чудес», 
«Сиддхартхе», «Моби Дике» и «Маленьких женщинах» — все эти книги есть 
в свободном доступе. Я намеренно не стал копировать файл 
siddhartha .txt
в каталог 
с программой 
word_count .py
, чтобы выяснить, насколько хорошо наша программа 
справляется с отсутствием файла:
def count_words(filename):
...
filenames = ['alice.txt', 'siddhartha.txt', 'moby_dick.txt', 'little_women.txt']
for filename in filenames:
count_words(filename)
Отсутствие файла 
siddhartha .txt
не влияет на выполнение программы:
The file alice.txt has about 29461 words.
Sorry, the file siddhartha.txt does not exist.
The file moby_dick.txt has about 215136 words.
The file little_women.txt has about 189079 words.


202

Достарыңызбен бөлісу:
1   ...   118   119   120   121   122   123   124   125   ...   266




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

    Басты бет