Проблема с задачей python по созданию резервной копии

Читаю книгу A Byte of Python. Первая задача "Создание резервной копии". Возникает проблема, прочитал много постов, но к сожалению решение своей проблемы так и не нашёл.

Установил zip как и указано. В cmd команда "zip" отображается и через cmd я могу создать резервный архив с файлами. Пробовал с 7Zip, указывал файл напрямую, но всё равно ошибка. В переменную PATH добавил необходимое. Ниже оставил код.

import os
import time

# 1. Файлы и каталоги, которые необходимо скопировать, собираются в список.
source = ['C:\\Code']
# Для имен, содержащих пробелы, необходимо использовать
# двойные кавычки внутри строки.

# 2. Резервные копии должны храниться в основном каталоге резерва.
target_dir = 'D:\\Backend'

# 3. Файлы помещаются в zip-архив.
# 4. Именем для zip-архива служит текущая дата и время.
target = target_dir + os.sep + time.strftime('%Y%m%d%H%M%S') + '.zip'

# 5. Используем команду "zip" для помещения файлов в zip-архив
zip_command = "zip -qr {0} {1}".format(target, ' '.join(source))

# Запускаем создание резервной копии
print(zip_command)
if os.system(zip_command) == 0:
    print('Резервная копия успешно создана в', target)
else:
    print('Создание резервной копии НЕ УДАЛОСЬ')

zip -qr D:\Backend\20200815125347.zip C:\Code
Создание резервной копии НЕ УДАЛОСЬ

введите сюда описание изображения

введите сюда описание изображения

UPD. введите сюда описание изображения


Ответы (2 шт):

Автор решения: Elusha

Если вам нужна такая рабочая программа, то можно ничего не устанавливать и использовать стандартный модуль zipfile:

import os
import time
import zipfile


sources = ['C:\\Code']

target_dir = 'D:\\Backend'

target = target_dir + os.sep + time.strftime('%Y%m%d%H%M%S') + '.zip'
files = []

for source in sources:                    #Ищем
    for i in os.walk(source):             #абсолютные
        for file in i[2]:                 #имена
            files.append(i[0]+'\\'+file)  #всех файлов

try:
    with zipfile.ZipFile(target, 'w') as z: # Записываем
        for file in files:                  # всё
            z.write(file)                   # в архив
except:
    print('Создание резервной копии НЕ УДАЛОСЬ')
else:
    print('Резервная копия успешно создана в', target)

→ Ссылка
Автор решения: Danila

По совету использовал subprocess и всё получилось. Всё также прекрасно работает и с 7Zip.

import subprocess
import time

# 1. Файлы и каталоги, которые необходимо скопировать, собираются в список.
source = ['C:\\py']
# Для имен, содержащих пробелы, необходимо использовать
# двойные кавычки внутри строки.

# 2. Резервные копии должны храниться в основном каталоге резерва.
target_dir = '"D:\\Backup"'

# 3. Файлы помещаются в zip-архив.
# 4. Именем для zip-архива служит текущая дата и время.
target = target_dir + time.strftime('%Y%m%d%H%M%S') + '.zip'

# 5. Используем команду "zip" для помещения файлов в zip-архив
zip_command = "zip -qr {0} {1}".format(target, ' '.join(source))

# Запускаем создание резервной копии
print(zip_command)
if subprocess.call(zip_command) == 0:
    print('Резервная копия успешно создана в', target)
else:
    print('Создание резервной копии НЕ УДАЛОСЬ')
→ Ссылка