shutil para operações com arquivos
Copie, mova e arquive arquivos
shutil para operações com arquivos é uma aula grátis de Python Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Python Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Python Academy inclui 4 aulas no total.
O que é shutil?
O módulo shutil (utilitários do shell) oferece operações de alto nível com arquivos: copiar, mover, excluir árvores de diretórios e criar arquivos compactados. Ele se baseia em os para tarefas do dia a dia.
import shutil, os
os.makedirs('/tmp/shutil_demo', exist_ok=True)
with open('/tmp/shutil_demo/a.txt', 'w') as f:
f.write('hello')
print('created a.txt')Copiando um arquivo
shutil.copy(src, dst) copia o conteúdo de um arquivo e seus bits de permissão para um novo local.
import shutil, os
os.makedirs('/tmp/shutil_demo', exist_ok=True)
with open('/tmp/shutil_demo/src.txt', 'w') as f:
f.write('data')
shutil.copy('/tmp/shutil_demo/src.txt', '/tmp/shutil_demo/copy.txt')
print(os.path.exists('/tmp/shutil_demo/copy.txt'))copy versus copy2
shutil.copy2 funciona como copy, mas também preserva metadados, como marcas de tempo. Use-o quando os horários de modificação forem importantes.
import shutil, os
os.makedirs('/tmp/shutil_demo', exist_ok=True)
with open('/tmp/shutil_demo/m.txt', 'w') as f:
f.write('x')
shutil.copy2('/tmp/shutil_demo/m.txt', '/tmp/shutil_demo/m2.txt')
print('copied with metadata')Copiando uma árvore inteira
shutil.copytree(src, dst) copia recursivamente um diretório inteiro. O destino não pode existir anteriormente (a menos que você passe dirs_exist_ok=True).
import shutil, os
os.makedirs('/tmp/tree_src/sub', exist_ok=True)
with open('/tmp/tree_src/sub/f.txt', 'w') as f:
f.write('hi')
shutil.rmtree('/tmp/tree_dst', ignore_errors=True)
shutil.copytree('/tmp/tree_src', '/tmp/tree_dst')
print(os.path.exists('/tmp/tree_dst/sub/f.txt'))Movendo arquivos e pastas
shutil.move(src, dst) move ou renomeia um arquivo ou diretório. Ele funciona entre sistemas de arquivos nos casos em que os.rename falharia.
import shutil, os
os.makedirs('/tmp/move_demo', exist_ok=True)
with open('/tmp/move_demo/old.txt', 'w') as f:
f.write('move me')
shutil.move('/tmp/move_demo/old.txt', '/tmp/move_demo/new.txt')
print(os.path.exists('/tmp/move_demo/new.txt'))Excluindo uma árvore de diretórios
shutil.rmtree(path) remove um diretório e tudo o que estiver dentro dele. Use-o com cuidado: não há como desfazer a ação.
import shutil, os
os.makedirs('/tmp/to_delete/inner', exist_ok=True)
shutil.rmtree('/tmp/to_delete')
print('exists after rmtree:', os.path.exists('/tmp/to_delete'))ignore_errors e segurança
Passar ignore_errors=True para rmtree evita uma falha se o caminho não existir, o que é útil para fazer a limpeza antes de uma nova execução.
import shutil
shutil.rmtree('/tmp/never_existed', ignore_errors=True)
print('no error even though path was absent')Criando um arquivo compactado
shutil.make_archive(base_name, format, root_dir) reúne um diretório em um arquivo zip ou tar com uma única chamada.
import shutil, os
os.makedirs('/tmp/arch_src', exist_ok=True)
with open('/tmp/arch_src/data.txt', 'w') as f:
f.write('archive me')
path = shutil.make_archive('/tmp/my_archive', 'zip', '/tmp/arch_src')
print('created', os.path.basename(path))Extraindo um arquivo compactado
shutil.unpack_archive(filename, extract_dir) reverte o processo, expandindo um arquivo zip ou tar em uma pasta.
import shutil, os
shutil.make_archive('/tmp/box', 'zip', '/tmp/arch_src')
shutil.unpack_archive('/tmp/box.zip', '/tmp/unpacked')
print(os.listdir('/tmp/unpacked'))Encontrando executáveis
shutil.which(name) localiza um programa no PATH do sistema, como o comando which do shell. Ele retorna o caminho completo ou None.
import shutil
print(shutil.which('python3'))
print(shutil.which('definitely_not_a_real_program'))Uso do disco
shutil.disk_usage(path) informa o número total de bytes, os bytes usados e os bytes livres do sistema de arquivos que contém o caminho.
import shutil
usage = shutil.disk_usage('/')
print('total GB:', round(usage.total / 1e9, 1))
print('free GB:', round(usage.free / 1e9, 1))Verificação rápida
Teste sua compreensão de shutil.
Recapitulação
Você aprendeu a usar shutil para operações com arquivos:
copy/copy2copiam arquivos;copytreecopia árvores inteiras.moverenomeia ou realoca;rmtreeexclui árvores.make_archive/unpack_archivelidam com arquivos zip e tar.whichedisk_usageconsultam o sistema.
Próximo curso: criando ferramentas de linha de comando com argparse.
Perguntas Frequentes
A aula “shutil para operações com arquivos” é grátis?
Sim — o texto completo de “shutil para operações com arquivos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Python Academy, atualize para CoddyKit PRO. O curso de Python Academy inclui 4 aulas no total.
O que vou aprender em “shutil para operações com arquivos”?
Copie, mova e arquive arquivos Você pratica Python Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Python Academy?
Nenhuma experiência prévia é necessária. Python Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “shutil para operações com arquivos”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Python Academy?
Sim. Cada aula de Python Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Execução de comandos com subprocess
- Captura da saída
- Ambiente e módulo os
- shutil para operações com arquivos