Использование модуля mimetypes в классе SearchVisitor

ispolzovanie modulya mimetypes v klasse searchvisitor Законченные системные программы

Чтобы задействовать этот модуль для управления выбором текстовых файлов в сценариях поиска, написанных нами выше в этой главе, можно просто извлекать и анализировать первый элемент кортежа, возвращаемого для заданного имени файла. Например, все расширения в следующем списке считаются расширениями имен текстовых файлов (кроме расширения «.pyw», которое можно считать особым случаем):

>   >> for ext in [‘.txt’, ‘.py’, ‘.pyw’, ‘.html’, ‘.c’, ‘.h’, ‘.xml’]:

print(ext, mimetypes.guess_type(‘spam’ + ext))

.txt (‘text/plain’, None)

.py (‘text/x-python’, None)

.pyw (None, None)

.html (‘text/html’, None)

.c (‘text/plain’, None)

.h (‘text/plain’, None)

.xml (‘text/xml’, None)

Мы можем добавить этот прием в предыдущую реализацию класса SearchVisitor, переопределив метод candidate и заменив список расширений имен файлов, используемый по умолчанию, анализом возвращаемого типа модулем mimetypes — еще одно яркое свидетельство гибкости ООП:

C:\\PP4E\Tools> python

>   >> import mimetypes

>   >> from visitor import SearchVisitor # или PP4E.Tools.visitor, если не .

>>> 

>   >> class SearchMimeVisitor(SearchVisitor):

def candidate(self, fname):

contype, encoding = mimetypes.guess_type(fname)

return (contype and

contype.split(‘/’)[0] == ‘text’ and

encoding == None)

>   >> V = SearchMimeVisitor(‘mimetypes’, trace=0) # ключ поиска

>>> V.run(r’C:\temp\PP3E\Examples’) # корневой каталог

C:\temp\PP3E\Examples\PP3E\extras\LosAlamosAdvancedClass\day1-system\data.txt has mimetypes

C:\temp\PP3E\Examples\PP3E\Internet\Email\mailtools\mailParser.py has mimetypes

C:\temp\PP3E\Examples\PP3E\Internet\Email\mailtools\mailSender.py has mimetypes C:\temp\PP3E\Examples\PP3E\Internet\Ftp\mirror\downloadflat.py has mimetypes C:\temp\PP3E\Examples\PP3E\Internet\Ftp\mirror\downloadflat_modular.py has mimetypes

C:\temp\PP3E\Examples\PP3E\Internet\Ftp\mirror\ftptools.py has mimetypes

C:\temp\PP3E\Examples\PP3E\Internet\Ftp\mirror\uploadflat.py has mimetypes

C:\temp\PP3E\Examples\PP3E\System\Media\playfile.py has mimetypes

>>> V.scount, V.fcount, V.dcount

(8, 1429, 186)

Однако этот прием не обеспечивает абсолютную точность (в случае необходимости придется добавить логику обслуживания таких расширений, как «.pyw», которые не определяются модулем mimetypes) и подходит далеко не для всех клиентов (в некоторых случаях может потребоваться искать только определенные типы текстовых файлов), поэтому данная схема не использовалась в оригинальном классе. Использование и настройку его для ваших собственных нужд мы оставим в качестве самостоятельного упражнения.

Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011

Оцените статью
Секреты программирования
Добавить комментарий