Как стать автором
Обновить

Метаданные Excel файлов

Время на прочтение2 мин
Количество просмотров11K

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


Никогда не работал с метаданными до этого времени, хотя периодически возникала необходимость, но обходился другими средствами, поэтому опыта не было. И вот в очередное утро, наделав бутербродов и наведя литровую чашку кофе, приступил к реализации своей идеи.


"Приступил" конечно сильно сказано. Перво-наперво это естественно поиск в интернете информации о метаданных, о работе с ними в Python, похожих проектов и т.д. Почти сразу же наткнулся на модуль oletools для Python, он есть и на GitHub, и в PyPi, есть неплохая документация. Изучал я ее пару часов. Установил oletools. Все заработало, метаданные корректно извлекались. Но. В терминале. Мне же нужен был скрипт с циклом. Где только я в интернете не искал как "подружить" oletools и IDLE, дошел до 15(!) страницы в поисковике. Информации ноль.


Я уверен, вне всяких сомнений, что это замечательный модуль, наверняка очень мощный, но никак он мне не дался. В очередной попытке (уже к вечеру) заставить скрипт хоть как-то извлекать метаданные файла, поднялось очередное исключение. И вот тут я обратил внимание что oletools для работы загружает модуль olefile. Набрал в поисковике и каково же было мое удивление когда я обнаружил что это именно то что я весь день искал. Очень понятная документация. Прочел за полчаса и сразу же по ходу чтения набросал скрипт.


Сначала установка olefile в системе:
pip3 install --user olefile

А вот и сам скрипт, извлекающий метаданные из Excel файла (мне понадобилось только значение meta.last_saved_time):


import olefile
File_Ole='File.xls'
assert olefile.isOleFile(File_Ole) # Проверка корректности OLE файла
ole = olefile.OleFileIO(File_Ole)
meta = ole.get_metadata() # Извлечение метаданных
print('Дата создания файла:  '+str(meta.create_time)) # Вывод даты создания файла
print('Дата последнего сохранения:  '+str(meta.last_saved_time))# Вывод даты сохранения файла
meta.dump() # Вывод всех метаданных на экран
ole.close() # Закрытие файла

Не буду приводить здесь весь код своего скрипта, моей задачей в этом посте было рассказать о простом и быстром извлечении метаданных из Excel файла с помощью модуля olefile. Кстати этот модуль извлекает метаданные из множества форматов файлов, подробнее можно ознакомиться в документации.


Справедливости ради стоит заметить также что olefile извлекает метаданные только из файлов Excel 1997-2003, т.е. с расширением .xls. Для файлов .xlsx я писал конвертер с модулем pyexcel.


Ну вот и все. Спасибо за внимание, надеюсь мой пост поможет кому-нибудь сэкономить время, нервы и, самое главное, сохранить хорошее настроение.

Теги:
Хабы:
+12
Комментарии6

Публикации

Истории

Работа

Data Scientist
63 вакансии
Python разработчик
142 вакансии

Ближайшие события