Глава 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
Достарыңызбен бөлісу: |