https://habr.com/ru/post/437866/История
Доброго времени суток, хабровцы. Данная проблема возникла у меня еще с августа 2018 г. А дело все в том, что работники организации в которой я провожу основную часть своего времени очень много работают с различными файлами, копируют их себе, передают работу другому и осуществляя данные действия в большинстве случаев порядка 30% а то и больше информации теряется.
Одним из основных решений, которое я видел, является написание "
git" системы для работы с данными.
Алгоритм
Алгоритм имеет следующую структуру:
На сервере находится скрытая папка с данными. С помощью Python-модуля можно копировать данные с сервера и загружать их обратно на сервер (в скрытую папку).
Начинаем работу
Для реализации проекта я использую две библиотеки:
import shutil
import os
Пропишем основные моменты, которые нам пригодятся в ходе работы:
# в данном списке мы будем хранить основные ошибки, возникающие в ходе работы программы
err = ['>> Ошибка ввода команд', '>> Выбранная Вами дирректория отсутствует']
# пропишем цикл, который позволит нам запускать множество команд за один запуск программы
while True:
level = -1 # уровень команды
command = input('>> ') #ввод самой программы
commandDetail = command.split(' ') #детальное чтение команды
gitResult = [] # список произведенных действий
complete = '' #определение комманды предыдущего уровня
после основных моментов, пропишем первую команду, я ее назвал `git` (собственно говоря для прикола).
Для начала запустим цикл для детального чтения команд и продолжим:
for x in commandDetail:
level += 1 #сообщим уровень команды
if (x == 'git') and (level == 0) and (len(command) == 3):
print('>> Hi, my name`s git')
continue
Обговорим «Почему так много параметров сравнения?». Рассмотрим детально по пунктам и продолжим писать:
- (x == 'git') собственно отвечает за саму команду, которая была получена на вход;
- (level == 0) определить уровень нужно для того, чтобы выполнялась конкретно команда git и не выполнялась команда типа hdsfb git;
- (len(command) == 3) т.к. в дальнейшем команда git будет использоваться еще во многих командах типа git copy Folder или git push Folder, поэтому определим просто команду git;
Опишем еще парочку команд, например команду копирования из секретной папки в рабочую
# определим git команду git copy Folder
if (x == 'git') and (level == 0) and (complete == ''):
complete = 'git' #комплектуем git для дальнейшей обработки
continue
elif (x == 'copy') and (level == 1) and (complete == 'git') and (len(commandDetail) - level) > 1:
complete = 'copy'
continue
elif (x != '') and (level == 2) and (complete == 'copy'):
try:
shutil.copytree(r'.secretFiles/{0}'.format(x), r'.{0}'.format(x))
listsDirrectiry = os.listdir(r'.secretFiles/{}'.format(x))
gitResult.append('Скопированные файлы:')
for listsDirrectiryRead in listsDirrectiry:
gitResult.append('- ' + listsDirrectiryRead)
except FileNotFoundError:
gitResult.append(err[1])
# опишем выход из программы
elif (x == 'close') and (level == 0) and (len(command) == 5) and (complete == ''):
exit()
# опишем обработку командных ошибок
else:
print(err[0])
gitResult = []
break
# вывод в console
for readResult in gitResult:
print(readResult)
Собственно говоря вот и вся суть программы на первом этапе. Очень хочу поделиться, чтобы получить критику от настоящих профессионалов.
Все коды с примерами вы можете взять на
GitHub