Привет, наверное, ты уже знаешь, что главное в изучении программирования - это практика?! Сегодня мы создадим простенькую программу, которая создает резервную копию данных с помощью архиватора! Давай перейдем сразу к делу! Не волнуйтесь, это проще, чем кажется!
Подготовка к составлению программы
Для составления программы нам потребуется стандартная команда zip. Она установлена по умолчанию в любом стандартном дистрибутиве Linux.
Если вы пользователь операционной системы Windows, то для использования этой команды вам необходимо скачать и установить пакет zip со страницы GnuWin32. При установке оставьте стандартный путь "C:\Program Files (x86)\GnuWin32" либо "C:\Program Files\GnuWin32".
Далее нужно добавить путь "C:\Program Files (x86)\GnuWin32\bin" либо "C:\Program Files\GnuWin32\bin" (в зависимости от того, куда у вас установился этот пакет) в системную переменную окружения PATH. Для этого на панели задач в поиске введите "изменение системных переменных среды", как показано на картинке:
Далее в свойствах системы нужно выбрать "Переменные среды..." и создать новую системную переменную, как показано на картинке:
Перейдем к проектированию программы.
Проектирование программы
Итак, нам нужно составить программу, которая создает резервные копии необходимых нам данных. Для этого нам необходимо:
- выбрать папки и файлы, копии которых нужно создать;
- выбрать папку, в которой будут храниться резервные копии;
- архивировать данные и при желании добавить комментарий, наименованием будут служить текущие дата и время
Составление программы
Перейдем к составлению программы.
Импорт модулей для для управления системой и временем - os и time:
import os
import time
В переменной what_to_reserve выбираем пути мест, которые нужно копировать, а в переменной where_to_save выбираем путь, куда сохранять резервные копии. У вас должны быть свои пути (если вы пользователь Windows, то используйте двойной слеш в указании пути (\\)):
Windows:
what_to_reserve = ['"C:\\Users\\forvi\\Documents\\Study"', '"C:\\Users\\forvi\\Documents\\Photo"']
where_to_save = 'D:\\Backup'
Linux (заметьте, что слеш обратный):
what_to_reserve = ['/home/jack/Study', '/home/jack/Photo']
where_to_save = '/home/jack/Backups'
Получение сегодняшней даты для составления имени и пути архива и получение времени для составления имени архива:
today = where_to_save + os.sep + time.strftime('%Y%m%d')
now = time.strftime('%H%M%S')
В переменной today мы склеиваем путь для сохранения копий и сегодняшнюю дату с помощью os.sep (это означает \\ в Windows или / в Linux. В итоге today будет равен "D:\\Backup\\текущая дата". Переменная now получает значение текущего времени также для составления названия нашего архива.
Запрос комментария, который будет добавлен к названию архива:
comment = input('Введите комментарий: ')
if len(comment) == 0:
target = today + os.sep + now + '.zip'
else:
target = today + os.sep + now + '_' + comment.replace(' ', '_') + '.zip'
С помощью функции input мы получаем комментарий, далее идет проверка, если длина комментария равна 0 (то есть комментарий пуст), то название архива останется неизменным. Если комментарий не пуст, то введенный комментарий будет добавлен к названию архива. Функция replace здесь необходима для того, чтобы при вводе комментария с пробелами заменить пробелы на нижние подчеркивания.
Создаем каталог, если его еще не существует:
if not os.path.exists(today):
os.mkdir(today)
print('Каталог успешно создан', today)
Первая строка проверяет, создана ли папка для создания резервных копий. Если ее не существует, то система создаст нужный каталог и выведет сообщение об этом.
Использование команды 'zip' для помещения файлов в zip-архив:
zip_command = "zip -qr {0} {1}".format(target, ' '.join(what_to_reserve))
Переменная zip_command содержит команду, которую мы передадим системе для исполнения. Команде zip нужно передать параметры "-q" и "-r", если их объединить, то можно указать это так "-qr". С этими двумя параметрами программа будет выполняться тихо (-q - без вывода подробостей) и рекурсивно для каталогов (-r - должна включать все подкаталоги и файлы). Выражения {0} и {1} содержат в себе переменную target и what_to_reserve соответственно с помощью функции format().
Запуск резервного копирования:
if os.system(zip_command) == 0:
print("Резервная копия успешно создана в", target)
else:
print("Ошибка!")
Система получает собранную нами комману на выполнение. Если ничего плохого не происходит, то копирование пройдет успешно. В случае каках-либо неполадок программа сообщит об этом.
Если всё прошло удачно, то вы увидите такой результат:
Если вы пользователь Windows:
Если вы пользователь Linux:
Полный код программы
Для Windows:
import os
import time
what_to_reserve = ['"C:\\Users\\forvi\\Documents\\Study"', '"C:\\Users\\forvi\\Documents\\Photo"']
where_to_save = 'D:\\Backup'
today = where_to_save + os.sep + time.strftime('%Y%m%d')
now = time.strftime('%H%M%S')
comment = input('Введите комментарий: ')
if len(comment) == 0:
target = today + os.sep + now + '.zip'
else:
target = today + os.sep + now + '_' + comment.replace(' ', '_') + '.zip'
if not os.path.exists(today):
os.mkdir(today)
print('Каталог успешно создан', today)
zip_command = "zip -qr {0} {1}".format(target, ' '.join(what_to_reserve))
if os.system(zip_command) == 0:
print("Резервная копия успешно создана в", target)
else:
print("Ошибка!")
Для Linux:
import os
import time
what_to_reserve = ['/home/jack/Study', '/home/jack/Photo']
where_to_save = '/home/jack/Backups'
today = where_to_save + os.sep + time.strftime('%Y%m%d')
now = time.strftime('%H%M%S')
comment = input('Введите комментарий: ')
if len(comment) == 0:
target = today + os.sep + now + '.zip'
else:
target = today + os.sep + now + '_' + comment.replace(' ', '_') + '.zip'
if not os.path.exists(today):
os.mkdir(today)
print('Каталог успешно создан', today)
zip_command = "zip -qr {0} {1}".format(target, ' '.join(what_to_reserve))
if os.system(zip_command) == 0:
print("Резервная копия успешно создана в", target)
else:
print("Ошибка!")
В своей другой публикации я советовал путь изучения Python, советую ознакомиться, вот ссылка!
Удачи вам в освоении такого замечательного языка программирования как Python!!!