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:
- 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 -
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 -
- 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.