Python и Excel глазами НСИ

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.


Всем привет! Меня зовут Алмаз. Я специалист по НСИ (нормативно-справочной информации) в компании Bimeister.
Хотел бы поделиться своим небольшим опытом автоматизации некоторых рутинных задач при работе с различными файлами и Excel- базами данных.

Python.

Предыстория.

Сейчас довольно много материала по данному языку программирования. Порой новичку очень сложно понять, с чего начать и в какую сторону двигаться. По крайней мере, для работы в инженерной области, найти что-то полезное для меня было не очень просто. Я начал изучать основы языка Python на Freecodecamp.org.

Хороший бесплатный ресурс, однако требует знания английского или хотя бы желание его выучить. Сам курс назывался «Scientific Computing with Python», и вел его доктор Чак (Dr. Chuck, преподаватель Мичиганского университета). Доктор Чак очень просто и с юмором преподносит основные понятия и делится своим многолетним опытом для очень неискушенных учащихся.
Проучившись по несколько часов в неделю в течение нескольких месяцев, мне выпала возможность применить полученные навыки на практике.

Задача.

В сетевой папке лежат сканы документов в формате .pdf. Периодически документы в эту папку добавляются. Необходимо отслеживать новые поступления документов и скачивать их для дальнейшей обработки и загрузки в ПО на сервере клиента.
Так как количество документов может быть от нескольких единиц до нескольких сотен, то вручную данную работу сделать довольно проблематично. А если это надо делать ежедневно…

Решение.

Создаем список файлов, используя Excel. Работа с Excel будет рассмотрена в следующей части статьи. При добавлении в папку новых файлов создаем еще один список с помощью Excel.
Сравниваем со старым списком и в итоге у нас появляется список только новых файлов.
Такой список будет иметь строки в следующем виде:

\vol02\Цех №46\1_ОП\05_КИПиА\1.3.46.U01.451.ПО.Паспорт на средство измерения СТМ-10.pdf

Далее создаем текстовый файл в формате .txt и копируем в него наш список. Назовем этот файл List.txt:

\vol02\Цех №46\1_ОП\05_КИПиА\1.3.46.U01.451.ПО.Паспорт на средство измерения СТМ-10.pdf
\vol02\Цех №46\1_ОП\05_КИПиА\1.3.46.U01.452.ПО.Паспорт на средство измерения СТМ-10.pdf
\vol02\Цех №46\1_ОП\05_КИПиА\1.3.46.U01.453.ПО.Паспорт на средство измерения СТМ-10.pdf

Помещаем этот файл в папку с будущим файлом программы на Python. Для написания кода я использую “PyCharm Community Edition” (https://www.jetbrains.com/ru-ru/pycharm/download/other.html ).

Запускаем Pycharm, создаем новый файл с расширением “.py” – Main.py.

Нам понадобится модуль “shutil”. По нему много информации в сети. В моем случае этот модуль пришлось найти в интернете и положить в папку с файлом программы.

Далее все просто… Привожу ниже код программы:

import shutil
handle= open('list.txt', encoding='utf-8')
dest='D:\\Паспорта 55 цех\\Общ'
for line in handle:
    src = line.strip()
    #print(src)
    shutil.copy(src, dest)
    print("Copying file..",src[75:])
print('Finished')

Теперь разберем код программы подробнее:

“import shutil” – импортируем модель shutil;
“handle” открывает нам файл list.txt. Декодируем его в utf-8 – для исключения ошибок кодировки;
“dest” – указываем путь, куда скачивать файлы;
“for line in handle” – перебираем строки нашего списка с файлами в цикле;
“src = line.strip()” – метод .strip разбивает текст, при этом при каждой итерации цикла в переменную src записывается адрес очередного файла;
“#print(src)” – закомментированный код. Если убрать символ #, то можно выводить на экрать текущую строку списка с адресом файла при каждой итерации цикла;
“shutil.copy(src, dest)” – метод “.copy” модуля “shutil”, который непосредственно копирует файл из папки “src” в папку “dest”;
“print("Copying file..",src[75:])” – выводим на экран название файла( последние 75 символов строки из списка файлов);
“print('Finished')” – выводим на экран уведомление об окончании процесса копирования.

Также обращаю внимание, что в коде программы адрес папки указан, используя двойные символы “//”, а в списке файлов – используется одинарный “/”. Это связано с особенностью кодировки символов в Python. Если данный вопрос интересен, то можно поискать материалы по теме “Escape последовательности”.

Excel.

Задача.

Получить список только новых файлов в сетевой папке из первой части статьи.

Решение.

К примеру, сегодня в сетевую папку выложены файлы сканов документов. Завтра планируется, что в папку будут выложены еще файлы. При этом на дату создания ориентироваться нельзя, так как документы могут быть отсканированы в один день, а выложены в папку для скачивания через несколько дней. При этом более “ранние” файлы могут быть выложены позже.

Запускаем Excel. На вкладке “Данные” кликаем “Получить данные”, затем “Из файла”/ “Из папки” и выбираем нужную папку.
















После загрузки данных, открывается окно:

Нажимаем “Загрузить” и видим:

Нас интересуют столбцы Name (Имя файла) и Folder path ( Адрес папки). Для получения адреса файла необходимо “соединить” эти два столбца. В ячейке G1 пишем формулу =F1&A1.

В итоге мы получим список в виде строк следующего вида:

\vol02\5_Цех №5\2_Установка производства кислорода\05_КИПиА\1.1.05.020.05.TIRSA 2-2.ПО.Паспорт на устройство контроля и регистрации ФЩЛ-502.pdf

Мы получили список полных адресов файлов, которые на сегодняшний день присутствуют в папке. Далее можно скачать эти файлы с помощью Python, как было объяснено выше.

Через несколько дней, когда нам сообщат, о том что выложены новые файлы в папку, создаем точно такой же файл.
Затем копируем данные из нового файла в “старый” и вставляем данные в одну таблицу ниже существующих данных. После этого с помощью инструмента “ Удалить дубликаты“, оставляем только адреса только новых файлов.

Далее повторяем скачивание с помощью Python.

Таким образом, мы можем довольно быстро находить новые файлы в папке с уже существующими файлами и быстро их скачивать. Разумеется, данный метод не является идеалом. Если есть какие-то наработки в данной области, прошу поделиться в комментариях.

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

Источник: https://habr.com/ru/companies/bimeister/articles/791702/


Интересные статьи

Интересные статьи

Всем привет! Если перед вами стоит задача проведения А/Б тестирования, то я помогу вам понять, как с помощью python сформировать однородные группы с помощью алгоритмов сходства объектов на основе коси...
Показываю, как человеку с минимальными знаниями командной строки и Python перенести своего Telegram-бота на отечественные виртуальные сервера при помощи программы Docker.
Денис Яковлев из JetBrains показывает новый питерский микрорайон «Балтийская жемчужина», где всё что нужно — в двух шагах от дома. А ещё рассказывает о трудностях переезда из Сибири и плюсах удалёнки....
Доброго времени суток, хабраледи и хабраджентельмены! В этой статье мы продолжим погружение в статистику вместе с Python. Если кто пропустил начало погружения, то вот ссы...
Я живу в хорошем городе. Но, как и во многих других, поиск парковочного места всегда превращается в испытание. Свободные места быстро занимают, и даже если у вас есть своё собственное, друзья...