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)