Python Shutil
O módulo fechado do Python permite que um desenvolvedor use objetos de arquivo com muita facilidade e sem entrar em detalhes mais profundos sobre como as coisas funcionam sob as coberturas. Este módulo abstraça basicamente a semântica de baixo nível de criar e gerenciar objetos de arquivo, limpando-os assim que o uso estiver completo e nos permite focar na lógica de negócios do aplicativo. Veremos muitos exemplos aqui, vamos começar.
Exemplos com módulo de fechamento de Python
Estudaremos vários exemplos demonstrando o uso de python Shutil módulo aqui.
Copiando um arquivo
Com o copyfile () função em Shutil Módulo, podemos fazer uma cópia exata de um arquivo existente em qualquer lugar da máquina. Vejamos um programa de amostra para demonstrar como isso pode ser feito:
OS de importação
Importar fechado
file_directory = './Arquivos'
Imprima ('Arquivos antes:', OS.listdir (file_directory))
Shutil.CopyFile ('./Arquivos/olá.TXT', './Arquivos/hello_again.TXT')
Imprima ('Arquivos After:', OS.listdir (file_directory))
Acabamos de copiar um arquivo que existe no diretório especificado para clonar o arquivo no mesmo diretório. Aqui está o que recebemos com este comando:
Cópia de arquivo fechado de python
A coisa boa sobre essa função é que a função mencionada também leva como entrada o nome para o novo arquivo a ser criado.
Copiando arquivos para outro diretório
É possível copiar um arquivo para um novo diretório com o Shutil cópia de() função. Vejamos isso em ação:
OS de importação
Importar fechado
Imprimir ('Fazendo um novo diretório.')
OS.mkdir ('linuxhint')
Imprima ('Arquivos antes:', OS.ListDir ('Linuxhint'))
Shutil.cópia de('./Arquivos/olá.txt ',' linuxhint ')
Imprima ('Arquivos After:', OS.ListDir ('Linuxhint'))
Vamos ver a saída para este comando:
Copiando arquivo para um novo diretório
Observe que quando um arquivo é copiado usando o cópia de() função, As permissões para o arquivo também são clonadas Mas os metadados do arquivo não são copiados. Isso significa que, quando você verifica quando esse arquivo foi feito, ele mostrará o horário novo quando você executou este script.
Copiando arquivo com metadados
Na última seção, vimos como poderíamos fazer uma cópia do arquivo. E se você quiser fazer um clone exato de um arquivo que envolve clonar seus metadados também como quando o arquivo foi feito etc. Isso também é possível, mas isso pode não funcionar em um sistema baseado em Posix. Vejamos um exemplo de como isso pode ser feito:
OS de importação
Importar fechado
tempo de importação
new_directory = 'linuxhint'
src_file = './Arquivos/olá.TXT'
dest_file = './Linuxhint/olá.TXT'
def file_metadata (arquivo):
stat_info = os.Stat (arquivo)
Print ('Modo:', Oct (Stat_info.st_mode)))
print ('criado:', tempo.ctime (stat_info.st_ctime)))
Imprimir ('Acesso:', tempo.ctime (stat_info.st_atime)))
print ('modificado:', tempo.ctime (stat_info.st_mtime)))
OS.mkdir (new_directory)
Print ('Metadados para o arquivo de origem:')
file_metadata (src_file)
Shutil.copy2 (src_file, new_directory)
Print ('Metadados para o arquivo de destino:')
file_metadata (dest_file)
Aqui está o que voltamos com este comando quando executamos isso em um sistema baseado em Posix (os metadados não são completamente clonados):
Copiar arquivo com metadados
Em sistemas não baseados em Posix, mesmo o tempo criado e acessado teria correspondido exatamente.
Diretório completo da clonagem
Na última seção, vimos como poderíamos fazer uma cópia do arquivo. Aqui, veremos como podemos clonar um diretório completo recursivamente. Isso significa que, se outro diretório existir no diretório que queremos clonar, eles serão clonados também.
importar pprint
Importar fechado
OS de importação
src_directory = './Arquivos'
dest_directory = './Linuxhint '
Shutil.copytree (src_directory, dest_directory)
Imprimir ('Conteúdo da fonte:')
pprint.Pprint (OS.listdir (src_directory)))
Imprimir ('Conteúdo do destino:')
pprint.Pprint (OS.listdir (dest_directory))
Vamos ver a saída para este comando:
Duplicando um diretório
Observe que o diretório que passamos para copytree () função como Diretório de destino não deve existir antes de executar este programa.
Excluindo um diretório
Excluir um diretório é muito simples com o rmtree () função no módulo. Vamos ver essa função em ação aqui:
importar pprint
Importar fechado
OS de importação
delete_directory = 'linuxhint'
current_directory = '.'
Imprimir ('Conteúdo antes da remoção:')
pprint.Pprint (OS.listdir (current_directory))
Shutil.rmtree (delete_directory)
Imprima ('Conteúdo após a remoção:')
pprint.Pprint (OS.listdir (current_directory))
Depois de executar o script, Linuxhint O diretório é excluído junto com o conteúdo. Aqui está o que recebemos com este comando:
Excluir diretório
Encontrando arquivos
Se você deseja encontrar um arquivo presente na variável do caminho em sua máquina, podemos usar o qual() função para encontrar esse arquivo pelo nome. Vejamos um exemplo de demonstração para esta função:
Importar fechado
Imprimir (fechar.que ('bsondump'))
Imprimir (fechar.que ('sem filas'))
Aqui está o que recebemos com este comando:
Encontre o arquivo no caminho
Monitorando o espaço do sistema de arquivo
Com o módulo fechado, temos uma função disk_usage () através da qual podemos obter informações de espaço em disco sobre nossa máquina também. Vejamos um exemplo que mostra esses dados de maneira legível pelo homem:
Importar fechado
total_b, usada_b, free_b = fechamento.Uso de disco('.')
gb = 10 ** 9 # GB == Gigabyte
Print ('Total: : 6.2f gb '.formato (total_b / gb))
Print ('Usado: : 6.2f gb '.formato (usado_b / gb))
Print ('grátis: : 6.2f gb '.formato (free_b / gb))
Aqui está o que recebemos com este comando:
Encontrar espaço do sistema de arquivos
Arquivando diretórios
Como exemplo final, veremos como podemos arquivar um módulo de fechamento de diretório make_archive () função. Vejamos o programa de amostra:
Importar fechado
OS de importação
archive_directory = \
OS.caminho.Expanduser (OS.caminho.Join ('Destination-Directory-Path', 'Linuxhint'))
root_dir = os.caminho.Expanduser (OS.caminho.Junte -se ('~', '.ssh '))
Shutil.make_archive (archive_directory, 'gztar', root_dir)
Aqui está o que recebemos com este comando:
Diretório de arquivamento
Se você não marcar o arquivo alcatrão e dar uma olhada, ele conterá todo o .ssh arquivos de diretório nele.
Conclusão
Nesta lição, analisamos como podemos gerenciar objetos de arquivo com operações de arquivo de alto nível facilmente com Shutil Módulo em Python. Operações como copiar o conteúdo de um arquivo, criar uma nova cópia de um arquivo etc. Parecia fácil com este módulo.