Найти - Пользователи
Полная версия: Проблема с задачкой из книги a byte of python
Начало » Python для новичков » Проблема с задачкой из книги a byte of python
1 2
IamDenis
Всем привет! Дочитал в книге “A byte of python” до пункта с задачками, первая задачка - Составить программу, которая создаёт резервные копии всех наших важных файлов. Короче она у меня вообще никак не хочет работать.

 import os
import time
# 1. Файлы и каталоги, которые необходимо скопировать, собираются в список.
source = ['"C:\\My Documents"', 'C:\\Code']
# Заметьте, что для имён, содержащих пробелы, необходимо использовать
# двойные кавычки внутри строки.
# 2. Резервные копии должны храниться в основном каталоге резерва.
target_dir = 'E:\\Backup' # Подставьте ваш путь.
# 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))
# Запускаем создание резервной копии
if os.system(zip_command) == 0:
     print('Резервная копия успешно создана в', target)
else:
     print('Создание резервной копии НЕ УДАЛОСЬ')

Погуглил немного и нашел решение, которое кому - то помогло
“скачивайте 7z, и передаете полный путь до него”
 zip_command = "\"C:\\Program Files\\7-Zip\\7z.exe\" a -tzip -ssw -mx1 -r0 {0} {1}".format(target, ' '.join(source))
7z у меня и так уже был установлен, в коде путь прописан, но это ничего не решила и ошибка осталась. Помогите пожалуйста, что не так?

C:\Users\Denis\Desktop\python\venv\Scripts\python.exe CUsers/Denis/Desktop/python/backup_ver1.py
Создание резервной копии НЕ УДАЛОСЬ
“zip” �� ���� ����७��� ��� ���譥�
��������, �ᯮ��塞�� �ணࠬ��� ��� ������ 䠩���.

Process finished with exit code 0
FishHook
IamDenis
Помогите пожалуйста, что не так?
Ну блин, вы собственную программу хоть как-нибудь то попытайтесь отдебажить. Вот такой вопрос, какое значение принимает переменная zip_command?
IamDenis
FishHook
Ну блин, вы собственную программу хоть как-нибудь то попытайтесь отдебажить
“Отдебажить” - Я так понимаю вы имеете ввиду нажать кнопку Debug? В PyCharm правая, верхняя кнопка рядом с кнопкой Run. Я нажимал её, а толку? Ничего нового для меня, нажатие этой кнопки не показало, только ошибку которая в самом низу поста.
Какое значение принимает переменная zip_command?
1. zip - она выполняет архивацию
2. -qr - это две отдельные команды, которые, для, как я понял, удобства, прописаны вместе “-q” - тихая архивация, “-r” - значение этой команды я не припомню.
3. Дальше подставляется значение переменной “target” - в ней хранится форматированная строка, в которой содержится путь до папки Backup + команда которая ВРОДЕ подставляет нижнее подчеркивание “_”, ну и далее дата + расширение файла.

Я прошу прощения, если для вас моя проблема чересчур банальна, я по части программирования ещё зеленее некуда, единственное, чем я ранее, совсем чуть-чуть занимался - это скриптингом на Lua, скриптил для samp, это было уже давно. Как - то наткнулся на Python на ютуб, он стал чаще появляться в рекомендациях, ну и привлек он меня, стал интересен, поэтому и учусь потихоньку. Для меня это все ново и пока что, мало что понимаю. В общем, если что не так - прошу, не сердчайте.
FishHook
IamDenis
Да я знаю, что делает zip, я ж не об этом спрашиваю, и даже не о встроенном в ИДЕ дебаггере.
Я спросил, какое значение принимает переменная zip_command?
Вот вы написали программу, вы рассчитываете, что некая переменная получит некое значение. И вот ваша программа не работает. А! Кошмар! Что же делать?
Ну что делать, надо убедиться, что все ваши ожидания от программы соответствуют реальному положению дел. Я вас спросил, чему равна переменная. Не по вашим представлениям и мечтам, а на самом деле. И вы кажется не можете ответить на этот вопрос. Вот это и есть процесс отладки программы, вы должны шаг за шагом проследить за ходом выполнения программы и убедиться, что все происходит, как вы задумали. Не умеете пользоваться инструментами - не страшно. Но принтов то вы можете же напихать? Ну просто блин чтобы программа напечатала значение переменной.
IamDenis
Да, следуя книге, я добавил print(zip_command) прямо перед вызовом os.system и запустил
После этого скопировал выведенную команду «zip_command» и вставил её в командную строку, чтобы проверить, работает ли она корректно сама по себе, правда подозреваю, что я не правильно понял насчет командной строки, наверное надо было вызвать виндосовскую командную строку (Win + R) и туда ввести, а я её ввел в Терминал.

В общем, проблема уже решена, помогли на другом форуме
 zip_command = "\"C:\\Program Files\\7-Zip\\7z.exe\" a -tzip -ssw -mx1 -r0 {0} {1}".format(target, ' '.join(source))

Единственное, что хотелось бы ещё узнать, как избавиться от иероглифов и знаков вопросов в ошибках
“zip” �� ���� ����७��� ��� ���譥�
��������, �ᯮ��塞�� �ணࠬ��� ��� ������ 䠩���.
FishHook
IamDenis
В общем, проблема уже решена, помогли на другом форуме

Денис, вот смотри, твоя “проблема” считывается за две секунды взгляда на твой код
 source = ['"C:\\My Documents"', 'C:\\Code']
у первое слово с кавычками, а второе - без. Это очевидный источник проблемы. Моя задача, и моих коллег здесь - научить тебя решать такие проблемы самостоятельно. С этой целью и были заданы все вопросы выше. Впрочем, как знаешь


IamDenis
FishHook
Так подожди, как это может быть проблемой, если так было в книге и присутствие двойных кавычек в первом случае объяснялось тем, что в пути к папке My Documents есть пробелы, а во втором пути пробелов нет, поэтому двойные кавычки там и не нужны. Чтобы все заработало мне нужно было указать прямой путь до исполняемого файла 7zip, после этого код заработал, ну были ещё ошибки с путями к папкам которые нужно было заархивировать, C:\\Code я заменил на C:\\Games и С:\\My Documents я пробовал прописывать и так C:\\Documents, но все равно появлялся Warning. Однако код работал и архивация выполнилась, только одной папки
xam1816
IamDenis
Единственное, что хотелось бы ещё узнать, как избавиться от иероглифов и знаков вопросов в ошибках
“zip” �� ���� ����७��� ��� ���譥�
��������, �ᯮ��塞�� �ணࠬ��� ��� ������ 䠩���.

“zip” не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
В win10 есть штатная команда для архиватора tar
что-то вроде этого должно быть
 target = target_dir + os.sep + time.strftime('%Y%m%d%H%M%S') + '.tar'
# 5. Используем команду "zip" для помещения файлов в zip-архив
zip_command = "tar -c -f{0} {1}".format(target, ' '.join(source))

IamDenis
как это может быть проблемой, если так было в книге
Эти книги бывает сканируют или перепечатывают друг у друга по сто раз,а потом выкладывают в интернет.Новичку трудно осознать, что в книгах может быть всякая лажа.
Двойные кавычки в пути это в cmd windows нужно для названий с пробелами, не знаю как маках и линуксах
IamDenis
xam1816
Ну так у меня Windows, windows 10. А разве не в командную строку винды отправляется значение переменной zip_command на выполнение архивации
вот цитата из книги
Затем мы, наконец, выполняем команду при помощи функции os.system, которая запускает команду так, как будто она была запущена из системы, т.е. из
командной оболочки.

xam1816
Эти книги бывает сканируют или перепечатывают друг у друга по сто раз,а потом выкладывают в интернет
Возможно, но в данном случае это сомнительно потому что, в книге дается комментарий насчет использования двойных кавычек
 # 1. Файлы и каталоги, которые необходимо скопировать, собираются в список.
source = ['"C:\\My Documents"', 'C:\\Code']
# Заметьте, что для имён, содержащих пробелы, необходимо использовать
# двойные кавычки внутри строки.
И как ты сам сказал:
xam1816
Двойные кавычки в пути это в cmd windows нужно для названий с пробелами
Что подтверждает, что в книге про двойные кавычки, это не ошибка, не перепечатка и т.д.
IamDenis
FishHook
Моя задача, и моих коллег здесь - научить тебя решать такие проблемы самостоятельно. С этой целью и были заданы все вопросы выше. Впрочем, как знаешь
Это хорошо, это похвально и я не хотел тебя как - то задеть тем, что я пошел узнавать решение проблемы на другой форум, просто я сразу написал посты с просьбой о помощи на двух форумах, в надежде получить побыстрей ответ
На другом форуме я получил более практичный ответ, который решил мою проблему, ну а в случае с ответом на этом форуме, у меня начинались закрадываться мыслишки, что меня пытались отшить куда-нибудь на документацию по python, судя по прошлому опыту. Когда я учил lua для самп и задавал вопросы на соотв. форуме, там некоторые ЧСВ ребята, ввиду больших знаний в сфере скриптинга на луа, заглядывали в подраздел “Вопросы и ответы” и вместо того, чтобы подсказывать решение проблемы с не работающим кодом, как - то указывать на ошибки, они просто посылали их читать основы. Пусть ошибки и были банальными, но они все же новички, а новичкам свойственно ошибаться.

В общем, как бы - то ни было, я безмерно благодарен вам, за то, что вы помогаете разбираться в проблемах и учите нас(новичков) искать причину ошибок в коде.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB