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