Copiar ejercicio especial de Python

El ejercicio de copia especial ve el sistema de archivos y el material de comandos externos en la sección Python Utilities. Este ejercicio se encuentra en el directorio "copyspecial" dentro de google-python-exercises (descarga google-python-exercises.zip si aún no lo hiciste; consulta Configuración para obtener más detalles). Agrega tu código a copyspecial.py.

El programa copyspecial.py toma uno o más directorios como argumentos. Digamos que un archivo “especial” es uno en el que el nombre contiene el patrón __w__ en alguna parte, donde la w corresponde a uno o más caracteres de palabras. El main() proporcionado incluye código para analizar los argumentos de la línea de comandos, pero el resto depende de ti. Escribe funciones para implementar las siguientes funciones y modifica main() para llamar a tus funciones.

Funciones sugeridas para tu solución(más detalles a continuación):

  • get_special_paths(dir): Muestra una lista de las rutas de acceso absolutas de los archivos especiales en el directorio determinado.
  • copy_to(paths, dir) dada una lista de rutas de acceso, copia esos archivos en el directorio específico.
  • zip_to(paths, zippath) en una lista de rutas de acceso, comprime esos archivos en el archivo zip determinado

Parte A (manipulación de rutas de archivos)

Recopila una lista de las rutas de acceso absolutas de los archivos especiales en todos los directorios. En el caso más simple, solo imprime esa lista (en este caso, el “.” después del comando es un único argumento que indica el directorio actual). Imprime una ruta de acceso absoluta por línea.

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

Supondremos que los nombres no se repiten en los directorios (opcional: verifica esa suposición y equivalga a un error si se infringe).

Parte B (copia de archivos)

Si la opción "--todir dir" está presente al comienzo de la línea de comandos, no imprimas nada. En su lugar, copia los archivos en el directorio determinado y créalos si es necesario. Usa el módulo de Python "shutil" para copiar archivos.

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

Parte C (llamar a un programa externo)

Si la opción "--tozip zipfile" está presente al comienzo de la línea de comandos, ejecuta este comando: "zip -j zipfile <list all the files>". Esto creará un archivo ZIP que contenga los archivos. Solo por diversión o tranquilidad, también imprime la línea de comandos que harás primero (como se muestra en la clase). (Nota de Windows: Windows no incluye un programa para producir archivos .zip estándar de forma predeterminada, pero puedes descargar el programa ZIP abierto y gratuito desde www.info-zip.org). Si eres usuario de Linux, si no tienes zip instalado, puedes llamar a sudo apt install zip para instalarlo .

$ ./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

Si el proceso secundario se cierra con un código de error, finaliza con un código de error y, luego, imprime el resultado del comando. Para probar esto, intenta escribir un archivo ZIP en un directorio que no exista.

$ ./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)