logo

Módulo Shutil em Python

Neste tutorial, aprenderemos sobre o módulo Shutil em Python. Discutiremos como podemos realizar a operação de arquivo de alto nível, como criar um novo arquivo de cópia e arquivá-lo e copiar o conteúdo de um arquivo para outro usando o script Python. Vamos fazer uma introdução básica ao módulo Shutil.

Módulo Python Shutil

O módulo shutil do Python fornece a facilidade para executar a operação de arquivo de alto nível. Ele pode operar com o objeto arquivo e nos oferece a capacidade de copiar e remover os arquivos. Ele lida com a semântica de baixo nível, como criar e fechar objetos de arquivo após realizar todas as operações.

Funcionamento do Módulo Shutil

O módulo shutil do Python vem com muitos métodos integrados. Exploraremos alguns métodos importantes. Para começar a trabalhar com este módulo, primeiro precisamos importá-lo em nosso arquivo Python atual.

Copiar arquivos

Este módulo fornece o cópia de() função que é usada para copiar dados de um arquivo para outro. Os arquivos devem estar no mesmo diretório e o arquivo de destino deve ser gravável. Vamos entender a seguinte sintaxe.

Sintaxe-

 shutil.copyfile(source, destination, *, follow_symlinks = True) 

Parâmetro:

Na sintaxe acima -

  • O primeiro argumento é source que mostra o caminho do arquivo de origem.
  • O segundo argumento é destino que mostra o caminho do arquivo de destino.
  • O terceiro argumento é opcional; o valor padrão deste parâmetro é verdadeiro.
  • Ele retorna uma string que mostra o caminho do arquivo recém-criado.

Vamos entender o exemplo a seguir.

Exemplo -

 import os import shutil # Creating a new folder in the current directory os.mkdir('javatpoint') # It will show the empty folder print('Empty Folder:', os.listdir('javatpoint')) # testcompare.py file will be copied in the javatpoint folder shutil.copy('testcompare.py', 'javatpoint') # After coping the file folder shows the file print('File Copied Name:', os.listdir('javatpoint')) 

Saída:

 Empty Folder: [] File Copied Name: ['testcompare.py'] 

Explicação -

A função copy() usa o nome do diretório como argumento. Aqui o metadados não for copiado, o arquivo copiado será considerado como o arquivo recém-criado. Este método também clonou todas as permissões do arquivo. Uma coisa a observar é que se o arquivo de destino já existir, ele será substituído pelo arquivo de origem.

Vejamos outro exemplo.

Exemplo - 2 se um destino for um diretório

 import os import shutil # hello.txt file will be copied source = r'D:Python Projectjavatpointhello.txt' # In the newly created foloder destination = r'D:Python ProjectNewFile' # Storing the new path of hello.txt file dest = shutil.copy(source, destination) # Print the new path print(dest) 

Saída:

 D:Python ProjectNewFilehello.txt 

Como mencionamos, a função copy() não copia os metadados. Mas, usaremos o copiar2() função que nos permite copiar o arquivo incluindo seus metadados.

Exemplo - 3: Tratamento de erros ao usar o método de cópia

 # importing shutil module import shutil # It is a source path source = r'D:Python ProjectNewFolder' # It is a destination path destination = r'D:Python ProjectNewFolder' try: shutil.copy(source, destination) print('File copied successfully.') # If the given source and path are same except shutil.SameFileError: print('Source and destination represents the same file.') # If there is no permission to write except PermissionError: print('Permission denied.') # For other errors except: print('Error occurred while copying file.') 

Saída:

 Source and destination represents the same file. 

A função copy2()

Esta função é semelhante à cópia de() função. Ele também pode copiar o conteúdo de um arquivo para outro, mas a única diferença é que pode preservar os metadados do arquivo. Vamos entender a seguinte sintaxe.

Sintaxe:

 shutil.copy2(source, destination, *, follow_symlinks = True) 

Parâmetro:

Na sintaxe acima -

  • O primeiro argumento é source que mostra o caminho do arquivo de origem.
  • O segundo argumento é destino que mostra o caminho do arquivo de destino.
  • O terceiro argumento é opcional; o valor padrão deste parâmetro é verdadeiro.
  • Ele retorna uma string que mostra o caminho do arquivo recém-criado.

Vamos entender o exemplo a seguir.

Exemplo -

 import os import shutil # hello.txt file will be copied source = r'D:Python Projectjavatpointhello.txt' metadata = os.stat(source) print(metadata) # In the newly created foloder destination = r'D:Python ProjectNewFile' # Storing the new path of hello.txt file dest1 = shutil.copy2(source, destination) metadata = os.stat(dest1) print('After copying file') print(metadata) # Print the new path print(dest1) 

Saída:

 os.stat_result(st_mode=33206, st_ino=562949953459285, st_dev=3029671014, st_nlink=1, st_uid=0, st_gid=0, st_size=17, st_atime=1622815671, st_mtime=1622705607, st_ctime=1622705607) After copying file os.stat_result(st_mode=33206, st_ino=562949953459287, st_dev=3029671014, st_nlink=1, st_uid=0, st_gid=0, st_size=17, st_atime=1622815748, st_mtime=1622705607, st_ctime=1622706243) D:Python ProjectNewFilehello.txt 

A função shutil.copyfile()

Este método é usado para copiar o conteúdo do arquivo de origem para o arquivo de destino, exceto os metadados. A origem e o destino devem ter um arquivo e o arquivo de destino deve fornecer permissão de gravação. Se já houver um arquivo de destino presente, ele será substituído pelo novo arquivo, caso contrário, crie um novo arquivo.

Vamos ver a seguinte sintaxe.

Sintaxe:

 shutil.copyfile(source, destination, *, follow_symlinks = True) 

Parâmetros:

Na sintaxe acima -

  • O primeiro argumento é source que mostra o caminho do arquivo de origem.
  • O segundo argumento é destino que mostra o caminho do arquivo de destino.
  • O terceiro argumento é opcional; o valor padrão deste parâmetro é verdadeiro.
  • Ele retorna uma string que mostra o caminho do arquivo recém-criado.

Vamos entender o exemplo a seguir.

Exemplo -

 import shutil # hello.txt file will be copied source = r'D:Python Projectjavatpointhello.txt' # In the newly created foloder destination = r'D:Python ProjectNewFilehi.txt' # Storing the new path of hello.txt file dest1 = shutil.copyfile(source, destination) # Print the new path print(dest1) 

Saída:

 D:Python ProjectNewFilehi.txt 

A função shutil.copytree()

Este método é usado para replicar o diretório completo. Ele copia uma árvore de diretórios inteira com raiz na origem para o diretório de destino. O diretório de destino ainda não deve estar presente. Vamos ver a seguinte sintaxe.

Sintaxe:

 shutil.copytree(src, dst, symlinks = False, ignore = None, copy_function = copy2, igonre_dangling_symlinks = False) 

Parâmetros:

alfabeto e números

Na sintaxe acima:

    src-Mostra o caminho do diretório de origem.mão -Mostra o caminho do diretório de destino.links simbólicos (opcional) -Leva os valores booleanos - True e False. Depende de quais metadados dos links originais ou links serão copiados para a nova árvore.ignorar (opcional) -Por padrão é None mas se o ignore for passado, deve ser um callable que recebe como argumentos. O diretório é visitado por copytree().copy_function (opcional) -O copy2 é o valor padrão deste parâmetro. O cópia de() função pode ser usada como parâmetro.ignore_dangling_symlinks(opcional) -Este parâmetro é usado para gerar a exceção se o arquivo apontado pelo link simbólico não existir.
  • Ele retorna a string que representa o caminho do diretório recém-criado.

Exemplo -

 # importing shutil module import shutil # It is source path src = r'D:Python Projectjavatpoint' # It is destination path dest = r'D:Python ProjectNewFolder' # Copy the content of # source to destination dest1 = shutil.copytree(src, dest) # Now we print path of newly # created file print('Destination path:', dest1) 

Saída:

 Destination path: D:Python ProjectNewFolder 

O shutil.rmtree()

Este método é usado para excluir a árvore de diretórios completa. Vamos ver a seguinte sintaxe.

Sintaxe:

 shutil.rmtree(path, ignore_errors=False, onerror=None) 

Parâmetro-

Na sintaxe acima -

    caminho -Ele representa o caminho do arquivo. Um objeto semelhante a um caminho é um objeto de string ou de bytes.ignorar_erros -A remoção será ignorada se este argumento for True.um erro -Se ignorar_erros for falso, esses erros serão tratados chamando um manipulador especificado por onerror.

Vamos entender o seguinte exemplo -

Exemplo -

 import shutil import os # location location_dir = r'D:Python ProjectNewFile' # directory directory = r'D:Python Projectjavatpoint' # path path1 = os.path.join(location_dir, directory) # removing directory shutil.rmtree(path1) 

O código acima removerá o diretório fornecido.

A função shutil. which()

O shutil.qual() A função é usada para obter o caminho de um aplicativo executável que seria executado se o cmd fornecido fosse chamado. Ele encontra o arquivo no caminho fornecido. Vamos ver a seguinte sintaxe.

Sintaxe:

 shutil.which(cmd, mode = os.F_OK | os.X_OK, path = None) 

Parâmetros

Na sintaxe acima -

    cmd -É uma string que representa o arquivo.modo -Especifica o modo do arquivo em que o método deve ser executado.caminho -Este parâmetro especifica o caminho a ser usado.
  • Este método retorna o caminho para um aplicativo executável.

Vamos entender o exemplo a seguir.

Exemplo -

 # importing shutil module import shutil # search the file cmd = 'python' # Using shutil.which() method locating = shutil.which(cmd) # Print result print(locating) 

Saída:

 C:Pythonpython.EXE 

Ele encontrará o arquivo fornecido no computador; se o arquivo for encontrado, ele retornará o caminho do arquivo, caso contrário, retornará Nenhum.