Copiar exercício especial do Python

O exercício "Copiar especial" acompanha o material de comandos externos e do sistema de arquivos na seção Utilitários do Python. Este exercício está no diretório "copyspecial" em google-python-exercises. Faça o download de google-python-exercises.zip se ainda não tiver feito isso. Consulte Configuração para mais detalhes. Adicione seu código em copyspecial.py.

O programa copyspecial.py aceita um ou mais diretórios como argumentos. Diremos que um arquivo "especial" é aquele em que o nome contém o padrão __w__ em algum lugar, em que w é um ou mais caracteres de palavras. O main() fornecido inclui código para analisar os argumentos da linha de comando, mas o restante é 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 de caminhos absolutos dos arquivos especiais no diretório especificado
  • copy_to(paths, dir) com base em uma lista de caminhos, copia esses arquivos para o diretório especificado
  • zip_to(paths, zippath) com uma lista de caminhos, compacte esses arquivos no ZIP fornecido

Parte A (manipular caminhos de arquivos)

Reúna uma lista dos caminhos absolutos dos arquivos especiais em todos os diretórios. No caso mais simples, basta exibir essa lista (aqui, o "." após o comando é um único argumento 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

Presumimos que os nomes não estão repetidos nos diretórios (opcional: verifique essa suposição e gere um erro se for 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 no diretório fornecido, criando-o se necessário. Use o módulo Python "shutil" para copiar o arquivo.

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

Parte C (chamar um programa externo)

Se a opção "--tozip zipfile" estiver presente no início da linha de comando, execute este comando: "zip -j zipfile <listar todos os arquivos>". Isso vai criar um arquivo ZIP com os arquivos. Só por diversão e segurança, mostre também a linha de comando que você vai fazer primeiro (como mostrado na aula). Observação sobre o Windows: por padrão, o Windows não vem com um programa para produzir arquivos ZIP padrão, mas é possível fazer o download do programa ZIP sem custo financeiro e aberto em www.info-zip.org. Para usuários de Linux, se zip não estiver instalado, será possível 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 for encerrado com um código de erro, saia com um código de erro e imprima a saída do comando. Para testar, tente 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)