Объясните, пожалуйста, задачу из "Bite of Python", сам не могу разобраться.

Inal

Новичок
Пользователь
Май 30, 2020
3
0
1
import os
import time

source = ['"C:\\My Documents"', 'C:\\Code']

target_dir = 'E:\\Backup' # Подставьте ваш путь.

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

zip_command = "zip -qr {0} {1}".format(target, ' '.join(source))

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


Это решение задачи, в которой нужно было реализовать программу, создающую копии резервных файлов, а также выполнить условия:
1. Файлы и каталоги, которые необходимо скопировать, собираются в список.
2. Резервные копии должны храниться в основном каталоге резерва.
3. Файлы помещаются в zip-архив.
4. Именем для zip-архива служит текущая дата и время.

Это задача - лишь пример, в которой нам предоставлено решение с комментариями и объяснением, однако большинство вещей я не понял, несмотря на то, что хорошо ознакомился с предыдущей теорией. Вот непонятные моменты:
1. Почему пути, куда мы копируем файлы в переменной target_dir складывается с функцией разделения os.sep, функцией, выдающей время, которое должно стать названием и строка '.zip'? Для меня это какая-то каша, так как до этого изучал только pascal и для меня переменные это строго числа либо строки, да и в принципе, я решал только логические и математические задачи с кодом и не работал с модулями и какими-либо внешними задачами.
2. Что такое -qr? В объяснении сказано, что это необходимо, чтобы программа работала тихо и рекурсивно. Если с рекурсивно все понятно, то что такое тихо?
3. Почему в zip_command присваивается команда в строке?

Вопросы практически по каждой строчке, гуглил, но с такой формулировкой, как у меня не находил.

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

Noor

Пользователь
Пользователь
Ноя 13, 2020
85
19
8
1. Почему пути, куда мы копируем файлы в переменной target_dir складывается с функцией разделения os.sep, функцией, выдающей время, которое должно стать названием и строка '.zip'? Для меня это какая-то каша, так как до этого изучал только pascal и для меня переменные это строго числа либо строки, да и в принципе, я решал только логические и математические задачи с кодом и не работал с модулями и какими-либо внешними задачами.
В разных ОС разные разделители в пути, где-то через "\\" где-то через "/" таким образом решается проблема что на какой-то из ос скрипт упадет
Согласно вашего примера - это будет вид:
- пример в Windows: 'E:\\Backup + \\ + 20121114143230 + '.zip'
- пример в Ubuntu: 'E:\\Backup + / + 20121114143230 + '.zip' (скорее всего будет ошибка в target_dir, так как явно используется \\)
Обратите внимание на употребление переменной os.sep – она содержит разделитель пути для конкретной операционной системы, т.е. он будет '/' в GNU/Linux и Unix3 , '\\' в Windows и ':' в Mac OS. Использование os.sep вместо этих символов напрямую делает программу переносимой, и она сможет работать на всех этих операционных системах.

2. Что такое -qr? В объяснении сказано, что это необходимо, чтобы программа работала тихо и рекурсивно. Если с рекурсивно все понятно, то что такое тихо?
Ну вот правильно сказано, что бы программа работала и не выводила какие-то сообщения
3.Почему в zip_command присваивается команда в строке?
zip_command присвоили некоторое значение что бы потом его использовать в любом месте кода и если после обновления (как пример) zip либы поменяется что-то в ее работе, какой-то из ключей (вместо -qr станет -qrt) то не нужно будет по всему коду "бегать" и выискивать строку "zip -qr {0} {1}".format(target, ' '.join(source))", а один раз поменять в одном месте именно там где присваивали значение zip_command

ps. Возможно кто-то из модеров подправит\дополнит мой ответ
 
Последнее редактирование:
  • Мне нравится
Реакции: Inal

Inal

Новичок
Пользователь
Май 30, 2020
3
0
1
Спасибо за ответ, разобрался более менее.
Могу ли я писать вам в личку если что по мере тех или иных проблем в ходе изучения? Был бы рад иметь такую возможность.
 

Noor

Пользователь
Пользователь
Ноя 13, 2020
85
19
8
форум всегда доступен, создавайте тему, если не я, то кто-то еще вам ответит. Возможно кто-то будет, как и вы, учиться и сможет найти ответ в постах. Ответ в личке принесет пользу только вам
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
25
28
target_dir = 'E:\\Backup' # Подставьте ваш путь
ещё обычно добавляют букву r-значит, что это строка и тогда плевать на слеши и путь можно вставить путём копирования с проводника
например
Код:
a = r'd:\Разметка.csv'
 

Форум IT Специалистов