Shutil module offers high-level operation on a file like a copy, create, and remote operation on the file. It comes under Python’s standard utility modules. This module helps in automating the process of copying and removal of files and directories. In this article, we will learn this module.
Copying Files to another directory
shutil.copy() method in Python is used to copy the content of the source file to the destination file or directory. It also preserves the file’s permission mode but other metadata of the file like the file’s creation and modification times is not preserved.
The source must represent a file but the destination can be a file or a directory. If the destination is a directory then the file will be copied into the destination using the base filename from the source. Also, the destination must be writable. If the destination is a file and already exists then it will be replaced with the source file otherwise a new file will be created.
Syntax: shutil.copy(source, destination, *, follow_symlinks = True)
Parameter:
- source: A string representing the path of the source file.
- destination: A string representing the path of the destination file or directory.
- follow_symlinks (optional) : The default value of this parameter is True. If it is False and source represents a symbolic link then destination will be created as a symbolic link.
Return Type: This method returns a string which represents the path of newly created file.
Example 1:
Python3
# Python program to explain shutil.copy() method
# importing shutil module
import shutil
source = "path/main.py"
destination ="path/main2.py"
# Copy the content of
# source to destination
dest = shutil.copy(source, destination)
# Print path of newly
# created file
print("Destination path:", dest)
Output:
Destination path: path/main2.py
Example 2: If the destination is a directory.
Python3
# importing shutil module
import shutil
# Source path
source = "path/main.py"
# Destination path
destination = "path/gfg/"
# Copy the content of
# source to destination
dest = shutil.copy(source, destination)
# Print path of newly
# created file
print("Destination path:", dest)
Output:
path/gfg/main.py
Copying the Metadata along with File
shutil.copy2() method in Python is used to copy the content of the source file to the destination file or directory. This method is identical to shutil.copy() method but it also tries to preserve the file’s metadata.
Syntax: shutil.copy2(source, destination, *, follow_symlinks = True)
Parameter:
- source: A string representing the path of the source file.
- destination: A string representing the path of the destination file or directory.
- follow_symlinks (optional) : The default value of this parameter is True. If it is False and source represents a symbolic link then it attempts to copy all metadata from the source symbolic link to the newly-created destination symbolic link. This functionality is platform dependent.
Return Type: This method returns a string which represents the path of newly created file.
Python3
# Python program to explain shutil.copy2() method
# importing os module
import os
# importing shutil module
import shutil
# path
path = 'csv/'
# List files and directories
# in '/home/User/Documents'
print("Before copying file:")
print(os.listdir(path))
# Source path
source = "csv/main.py"
# Print the metadeta
# of source file
metadata = os.stat(source)
print("Metadata:", metadata, "\n")
# Destination path
destination = "csv/gfg/check.txt"
# Copy the content of
# source to destination
dest = shutil.copy2(source, destination)
# List files and directories
# in "/home / User / Documents"
print("After copying file:")
print(os.listdir(path))
# Print the metadata
# of the destination file
matadata = os.stat(destination)
print("Metadata:", metadata)
# Print path of newly
# created file
print("Destination path:", dest)
Output:
Before copying file:
['archive (2)', 'c.jpg', 'c.PNG', 'Capture.PNG', 'cc.jpg', 'check.zip', 'cv.csv', 'd.png', 'Done! Terms And Conditions Generator – The Fastest Free Terms and Conditions Generator!.pdf', 'file1.csv', 'gfg', 'haarcascade_frontalface_alt2.xml', 'log_transformed.jpg', 'main.py', 'nba.csv', 'new_gfg.png', 'r.gif', 'Result -_ Terms and Conditions are Ready!.pdf', 'rockyou.txt', 'sample.txt']
Metadata: os.stat_result(st_mode=33206, st_ino=2251799814202896, st_dev=1689971230, st_nlink=1, st_uid=0, st_gid=0, st_size=1916, st_atime=1612953710, st_mtime=1612613202, st_ctime=1612522940)
After copying file:
['archive (2)', 'c.jpg', 'c.PNG', 'Capture.PNG', 'cc.jpg', 'check.zip', 'cv.csv', 'd.png', 'Done! Terms And Conditions Generator – The Fastest Free Terms and Conditions Generator!.pdf', 'file1.csv', 'gfg', 'haarcascade_frontalface_alt2.xml', 'log_transformed.jpg', 'main.py', 'nba.csv', 'new_gfg.png', 'r.gif', 'Result -_ Terms and Conditions are Ready!.pdf', 'rockyou.txt', 'sample.txt']
Metadata: os.stat_result(st_mode=33206, st_ino=2251799814202896, st_dev=1689971230, st_nlink=1, st_uid=0, st_gid=0, st_size=1916, st_atime=1612953710, st_mtime=1612613202, st_ctime=1612522940)
Destination path: csv/gfg/check.txt
Example 2: If the destination is a directory
Python3
# Python program to explain shutil.copy2() method
# importing os module
import os
# importing shutil module
import shutil
# Source path
source = "csv/main.py"
# Destination path
destination = "csv/gfg/"
# Copy the content of
# source to destination
dest = shutil.copy2(source, destination)
# List files and directories
# in "/home / User / Desktop"
print("After copying file:")
print(os.listdir(destination))
# Print path of newly
# created file
print("Destination path:", dest)
Output:
After copying file:
['cc.jpg', 'check.txt', 'log_transformed.jpg', 'main.py', 'main2.py']
Destination path: csv/gfg/main.py
Copying the content of one file to another
shutil.copyfile() method in Python is used to copy the content of the source file to the destination file. The metadata of the file is not copied. Source and destination must represent a file and destination must be writable. If the destination already exists then it will be replaced with the source file otherwise a new file will be created.
If source and destination represent the same file then SameFileError exception will be raised.
Syntax: shutil.copyfile(source, destination, *, follow_symlinks = True)
Parameter:
- source: A string representing the path of the source file.
- destination: A string representing the path of the destination file.
- follow_symlinks (optional) : The default value of this parameter is True. If False and source represents a symbolic link then a new symbolic link will be created instead of copying the file.
Return Type: This method returns a string which represents the path of newly created file.
Python3
# Python program to explain shutil.copyfile() method
# importing shutil module
import shutil
# Source path
source = "csv/main.py"
# Destination path
destination = "csv/gfg/main_2.py"
dest = shutil.copyfile(source, destination)
print("Destination path:", dest)
Output:
Destination path: csv/gfg/main_2.py
Replicating complete Directory
shutil.copytree() method recursively copies an entire directory tree rooted at source (src) to the destination directory. The destination directory, named by (dst) must not already exist. It will be created during copying.
Syntax: shutil.copytree(src, dst, symlinks = False, ignore = None, copy_function = copy2, ignore_dangling_symlinks = False)
Parameters:
src: A string representing the path of the source directory.
dest: A string representing the path of the destination.
symlinks (optional) : This parameter accepts True or False, depending on which the metadata of the original links or linked links will be copied to the new tree.
ignore (optional) : If ignore is given, it must be a callable that will receive as its arguments the directory being visited by copytree(), and a list of its contents, as returned by os.listdir().
copy_function (optional): The default value of this parameter is copy2. We can use other copy function like copy() for this parameter.
ignore_dangling_symlinks (optional) : This parameter value when set to True is used to put a silence on the exception raised if the file pointed by the symlink doesn’t exist.
Return Value: This method returns a string which represents the path of newly created directory.
Python3
# Python program to explain shutil.copytree() method
# importing os module
import os
# importing shutil module
import shutil
# path
path = 'C:/Users/ksaty/csv/gfg'
print("Before copying file:")
print(os.listdir(path))
# Source path
src = 'C:/Users/ksaty/csv/gfg'
# Destination path
dest = 'C:/Users/ksaty/csv/gfg/dest'
# Copy the content of
# source to destination
destination = shutil.copytree(src, dest)
print("After copying file:")
print(os.listdir(path))
# Print path of newly
# created file
print("Destination path:", destination)
Output:
Before copying file:
['cc.jpg', 'check.txt', 'log_transformed.jpg', 'main.py', 'main2.py', 'main_2.py']
After copying file:
['cc.jpg', 'check.txt', 'dest', 'log_transformed.jpg', 'main.py', 'main2.py', 'main_2.py']
Destination path: C:/Users/ksaty/csv/gfg/dest
Removing a Directory
shutil.rmtree() is used to delete an entire directory tree, the path must point to a directory (but not a symbolic link to a directory).
Syntax: shutil.rmtree(path, ignore_errors=False, onerror=None)
Parameters:
path: A path-like object representing a file path. A path-like object is either a string or bytes object representing a path.
ignore_errors: If ignore_errors is true, errors resulting from failed removals will be ignored.
oneerror: If ignore_errors is false or omitted, such errors are handled by calling a handler specified by onerror.
Python3
# Python program to demonstrate
# shutil.rmtree()
import shutil
import os
# location
location = "csv/gfg/"
# directory
dir = "dest"
# path
path = os.path.join(location, dir)
# removing directory
shutil.rmtree(path)
Finding files
shutil.which() method tells the path to an executable application that would be run if the given cmd was called. This method can be used to find a file on a computer which is present on the PATH.
Syntax: shutil.which(cmd, mode = os.F_OK | os.X_OK, path = None)
Parameters:
cmd: A string representing the file.
mode: This parameter specifies mode by which method should execute. os.F_OK tests existence of the path and os.X_OK Checks if path can be executed or we can say mode determines if the file exists and executable.
path: This parameter specifies the path to be used, if no path is specified then the results of os.environ() are used
Return Value: This method returns the path to an executable application
Python3
# importing shutil module
import shutil
# file search
cmd = 'anaconda'
# Using shutil.which() method
locate = shutil.which(cmd)
# Print result
print(locate)
Output:
D:\Installation_bulk\Scripts\anaconda.EXE
Similar Reads
Python Module Index Python has a vast ecosystem of modules and packages. These modules enable developers to perform a wide range of tasks without taking the headache of creating a custom module for them to perform a particular task. Whether we have to perform data analysis, set up a web server, or automate tasks, there
4 min read
Python sys Module The sys module in Python provides access to variables and functions that interact closely with the Python interpreter and runtime environment. It allows developers to manipulate various aspects of program execution and the interpreter itself. It's Key capabilities include:Accessing command-line argu
4 min read
Python Fire Module Python Fire is a library to create CLI applications. It can automatically generate command line Interfaces from any object in python. It is not limited to this, it is a good tool for debugging and development purposes. With the help of Fire, you can turn existing code into CLI. In this article, we w
3 min read
Python | shutil.copyfile() method Shutil module in Python helps automate the process of copying and removing files and directories. It comes under Pythonâs standard utility modules. Shutil(short for shell utility) module also provides many functions of high-level operations on files and collections of files. What is Shutil.copyfile
4 min read
Reloading modules in Python The reload() is a previously imported module. If you've altered the module source file using an outside editor and want to test the updated version without leaving the Python interpreter, this is helpful. The module object is the return value. Reloading modules in Python2.xreload(module)For above 2.
1 min read
Python Modules Python Module is a file that contains built-in functions, classes,its and variables. There are many Python modules, each with its specific work.In this article, we will cover all about Python modules, such as How to create our own simple module, Import Python modules, From statements in Python, we c
7 min read
Import module in Python In Python, modules allow us to organize code into reusable files, making it easy to import and use functions, classes, and variables from other scripts. Importing a module in Python is similar to using #include in C/C++, providing access to pre-written code and built-in libraries. Pythonâs import st
3 min read
__future__ Module in Python __future__ module is a built-in module in Python that is used to inherit new features that will be available in the new Python versions.. This module includes all the latest functions which were not present in the previous version in Python. And we can use this by importing the __future__ module. I
4 min read
Python | shutil.which() method Shutil module in Python provides many functions of high-level operations on files and collections of files. It comes under Pythonâs standard utility modules. This module helps to automate the process of copying and removal of files and directories. shutil.which() method tells the path to an executab
2 min read
Python | shutil.copystat() method Shutil module in Python provides many functions of high-level operations on files and collections of files. It comes under Pythonâs standard utility modules. This module helps in automating process of copying and removal of files and directories.shutil.copystat() method in Python is used to copy the
3 min read