Скопировать специальное упражнение Python

Упражнение «Специальное копирование» сопровождается материалом о файловой системе и внешних командах в разделе «Утилиты Python» . Это упражнение находится в каталоге «copyspecial» в google-python-exercisions (загрузите google-python-exercisions.zip , если вы еще этого не сделали, подробности см. в разделе «Настройка» ). Добавьте свой код в copyspecial.py.

Программа copyspecial.py принимает в качестве аргументов один или несколько каталогов. Мы скажем, что «специальный» файл — это файл, имя которого где-то содержит шаблон __w__, где w — это один или несколько символов слова. Предоставленный метод main() включает в себя код для анализа аргументов командной строки, но остальное зависит от вас. Напишите функции для реализации перечисленных ниже функций и измените main() для вызова ваших функций.

Предлагаемые функции для вашего решения (подробности ниже):

  • get_special_paths(dir) — возвращает список абсолютных путей к специальным файлам в заданном каталоге.
  • copy_to(paths, dir) учитывая список путей, копирует эти файлы в заданный каталог
  • zip_to(paths, zippath) учитывая список путей, заархивируйте эти файлы в заданный zip-файл

Часть A (управление путями к файлам)

Соберите список абсолютных путей к специальным файлам во всех каталогах. В простейшем случае просто распечатайте этот список (здесь «.» после команды — это единственный аргумент, указывающий текущий каталог). Выведите один абсолютный путь в каждой строке.

$ ./copyspecial.py .
/Users/nparlante/pycourse/day2/xyz__hello__.txt
/Users/nparlante/pycourse/day2/zz__something__.jpg

Мы предполагаем, что имена не повторяются в каталогах (необязательно: проверьте это предположение и исключите ошибку, если оно нарушено).

Часть Б (копирование файлов)

Если опция «--todir dir» присутствует в начале командной строки, ничего не выводите, а вместо этого скопируйте файлы в заданный каталог, создав его при необходимости. Используйте модуль Python «shutil» для копирования файлов.

$ ./copyspecial.py --todir /tmp/fooby .
$ ls /tmp/fooby
xyz__hello__.txt        zz__something__.jpg

Часть C (вызов внешней программы)

Если опция «--tozip zipfile» присутствует в начале командной строки, выполните следующую команду: «zip -j zipfile <перечислить все файлы>». Это создаст zip-файл, содержащий файлы. Просто для развлечения/перестраховки также распечатайте командную строку, которую вы собираетесь сделать в первую очередь (как показано в лекции). (Примечание для Windows: в комплект поставки Windows по умолчанию не входит программа для создания стандартных архивов .zip, но вы можете загрузить бесплатную и открытую программу zip с сайта www.info-zip.org .) Для пользователей Linux, если вы этого не сделали если у вас установлен zip , вы можете установить его, вызвав sudo apt install zip .

$ ./copyspecial.py --tozip tmp.zip .

Command I'm going to do:zip -j tmp.zip /Users/nparlante/pycourse/day2/xyz__hello__.txt /Users/nparlante/pycourse/day2/zz__something__.jpg

Если дочерний процесс завершается с кодом ошибки, выйдите с кодом ошибки и распечатайте выходные данные команды. Проверьте это, попытавшись записать zip-файл в несуществующий каталог.

$ ./copyspecial.py --tozip /no/way.zip .

Command I'm going to do:zip -j /no/way.zip /Users/nparlante/pycourse/day2/xyz__hello__.txt /Users/nparlante/pycourse/day2/zz__something__.jpg

zip I/O error: No such file or directory zip error: Could not create output file (/no/way.zip)