O exercício "Copiar Especial" acompanha o sistema de arquivos e o material de comandos externos na seção Utilitários do Python. Este exercício está na seção em google-python-exercises. Faça o download do arquivo google-python-exercises.zip, caso ainda não tenha feito isso. Consulte Configurar para ver mais detalhes. Adicione seu código em copyspecial.py.
O programa copyspecial.py usa um ou mais diretórios como argumentos. Dizemos que um "especial" file é aquele em que o nome contém o padrão __w__ em algum lugar, onde w é um ou mais caracteres de palavras. O main() fornecido inclui o código para analisar os argumentos da linha de comando, mas o resto é com você. Escreva funções para implementar os recursos abaixo e modifique main() para chamar suas funções.
Funções sugeridas para sua solução(detalhes abaixo):
- get_special_paths(dir) -- retorna uma lista dos caminhos absolutos dos arquivos especiais no diretório especificado
- copy_to(paths, dir) de acordo com uma lista de caminhos, copia esses arquivos para o diretório especificado
- zip_to(paths, zippath) dada uma lista de caminhos, compacte esses arquivos no arquivo ZIP fornecido
Parte A (manipulação de caminhos de arquivo)
Faça uma lista dos caminhos absolutos dos arquivos especiais em todos os diretórios. No caso mais simples, mostre apenas essa lista (aqui, o "." após o comando é um argumento único indicando o diretório atual). Mostre um caminho absoluto por linha.
$ ./copyspecial.py . /Users/nparlante/pycourse/day2/xyz__hello__.txt /Users/nparlante/pycourse/day2/zz__something__.jpg
Vamos supor que os nomes não sejam repetidos nos diretórios (opcional: verifique essa suposição e verifique se ela foi violada).
Parte B (cópia de arquivos)
Se a opção "--todir dir" estiver presente no início da linha de comando; não imprima nada. Em vez disso, copie os arquivos para o diretório fornecido, criando-os, se necessário. Usar o módulo Python "shutil" para copiar arquivos.
$ ./copyspecial.py --todir /tmp/fooby . $ ls /tmp/fooby xyz__hello__.txt zz__something__.jpg
Parte C (ligação para um programa externo)
Se o arquivo zip "--tozip" estiver presente no início da linha de comando, execute este comando: "zip -j zipfile <list all the files>". Isso criará um ZIP com os arquivos. Só para se divertir e tranquilizar, imprima também a linha de comando que você fará primeiro (como mostrado na aula). Observação para o Windows: o Windows não vem com um programa para produzir arquivos .zip padrão por padrão, mas você pode fazer o download do programa zip sem custo financeiro e aberto em www.info-zip.org.
Para usuários do Linux, se você não tiver o zip
instalado,
pode instalá-lo chamando 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
Se o processo filho sair com um código de erro, saia com um código de erro e imprima a saída do comando. Teste isso tentando gravar um arquivo ZIP em um diretório que não 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)