El ejercicio de copia especial se relaciona con el sistema de archivos y el material de comandos externos de la sección Utilidades de Python. Este ejercicio es el curso dentro de google-python-exercises (descarga google-python-exercises.zip si aún no lo hiciste, consulta Configuración para obtener más detalles). Agregue su código en copyspecial.py.
El programa copyspecial.py toma uno o más directorios como argumentos. Digamos que es una es uno en el que el nombre contiene el patrón __w__ en algún lugar, donde la w es uno o más caracteres de palabras. El comando 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 que se indican a continuación 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 dado.
- copy_to(paths, dir) dada una lista de rutas de acceso, copia esos archivos en el directorio dado.
- zip_to(paths, zippath) dada una lista de rutas de acceso, comprime esos archivos en el zipfile dado
Parte A (manipular rutas de acceso a 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 (aquí, el "." después del comando es un solo argumento que indica el directorio actual). Imprime una ruta 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 verifica el error si se infringe).
Parte B (copia de archivos)
Si el comando "--todir dir" está presente al comienzo de la línea de comandos, no imprimas nada y, en su lugar, copia los archivos en el directorio determinado y créalo si es necesario. Usar el módulo “shutil” de Python para copiar archivos.
$ ./copyspecial.py --todir /tmp/fooby . $ ls /tmp/fooby xyz__hello__.txt zz__something__.jpg
Parte C (llamada a un programa externo)
Si el archivo ZIP “--tozip” está presente al comienzo de la línea de comandos, ejecuta este comando: "zip -j zipfile <list all the files>". Se creará un archivo ZIP que contendrá los archivos. Por diversión o tranquilidad, también imprime la línea de comandos que usará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 en www.info-zip.org).
Si eres usuario de Linux, si no tienes zip
instalado, puedes
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, sal con un código de error y, luego, imprime el resultado del comando. Prueba esto escribiendo un archivo ZIP en un directorio que no existe.
$ ./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)