Often developing a program , we need to manipulate the files and directories of the system. Let's say we want to copy files and directories around different drivers or folders in a system. We can use the command prompt (in Windows) or terminal (on macOS and Linux) to copy a file from one location to another but what if we want to build a Python program that can do that for us!
 Luckily Python comes with a standard module called
 
  
   
    shutil
   
  
  ,
 
 which can help us to achieve this goal. Here in this Python tutorial, we will learn Python shutil module's 3 methods;
 
  shutil.copy()
 
 ,
 
  shutil.copy2()
 
 and
 
  shutil.copytree().
 
 And by the end of this tutorial, you will know how to use these 3
 
  shutil
 
 methods to copy files and directories from one location to another in Python.
How to Copy Files in Python (shutil.copy())?
 Suppose you have a file in location x and you wish to copy that file to y location using Python. Here, you can use the Python
 
  shutil.copy()
 
 method.
Python shutil.copy() Syntax:
shutil.copy(source,destination)
Parameters:
 The
 
  source
 
 parameter represents the source location of your file or the file you want to copy and it must be a string data type. The
 
  destination
 
 parameter represents the destination directory where the file should be copied and it should also be a string data type. The
 
  shutil.copy()
 
 method only copies the
 
  source
 
 file and paste it into the
 
  destination
 
 folder or directory.
 Although the Python
 
  shutil.copy()
 
 method will copy the content of the
 
  
   source file
  
 
 to the
 
  
   destination folder
  
 
 it will not copy the
 
  file's metadata.
 
 This means the metadata - like the created date and time of the file - will be not similar.
 
  The Return Value of shutil.copy()
 
 The
 
  shutil.copy()
 
 method returns the location for copied files in the string format.
Python Program to Copy a File in Python
 Let's say we have a file by name
 
  
   demo.txt
  
 
 at
 
  
   C:\Users\tsmehra\dev\example\
  
 
 folder.
 
 And we wish to copy the
 
  
   demo.txt
  
 
 file to
 
  
   D:\example2
  
 
 folder.
 
 
  #Python Program
 
import shutil
source = r"C:\Users\tsmehra\dev\example\demo.txt"
destination = r"D:\example2"
print("The demo.txt has copied at:")
print(shutil.copy(source, destination))
Output
The demo.txt has copied at:
D:\example2\demo.txt
Now check the D:\example2\ folder or directory
 
 Here you can see that the
 
  demo.txt
 
 file of
 
  
   C:\Users\tsmehra\dev\example\
  
 
 and
 
  demo.txt
 
 file of
 
  
   D:\example2\
  
 
 has two different
 
  modified times
 
 . This is because the copy() method only copies the content and file, not the metadata. If you re-run the above program the
 
  shutil.copy()
 
 method will just overwrite the file.
<Note>: Always use raw string using r"" as a prefix for the source and destination to prevent the Python escape characters.
How to Copy a File and Its Metadata in Python (shutil.copy2())?
 The Python
 
  shutil.copy()
 
 method only copies the file and its content to the destination folder, not metadata. But if you also wish to copy the metadata of the source file in the destination folder, you have to use the Python
 
  shutil.copy2()
 
 method.
Python shutil.copy2() Syntax:
shutil.copy2(source,destination)
Parameters:
 The
 
  source
 
 parameter represents the source location of your file or the file you want to copy. It must be of string data type. The
 
  destination
 
 parameter represents the destination directory where the file should be copied. It should also be a string. The
 
  shutil.copy2()
 
 method not only copies the
 
  source
 
 file and paste it into the
 
  destination
 
 folder or directory, but also maintains similar metadata.
Python Program to Copy a File and Its Metadata in Python
Let's take the same example but this time take a closer look at the metadata, such as the modified date and time for the source file and copied file. source file: C:\Users\tsmehra\dev\example\demo.txt
 
destination folder: D:\example2
 
 
  #python program
 
import shutil
source = r"C:\Users\tsmehra\dev\example\demo.txt"
destination = r"D:\example2"
print("The demo.txt has copied at:")
print(shutil.copy2(source, destination))
Output
The demo.txt has copied at:
D:\example2\demo.txt
Now check the D:\example2\ folder or directory
 
 Here you can see that the
 
  shutil.copy2()
 
 method not only copies the
 
  source
 
 file to the
 
  destination
 
 folder but the metadata, such as the modified date and time of the files is also the same.
How to Copy a Directory in Python (shutil.copytree())?
 With
 
  shutil.copy()
 
 and
 
  shutil.copy2()
 
 methods you can copy a single source file to the destination folder but what if you want to copy a complete
 
  directory in python
 
 along with its files to a specific location.
 To do this you can use the Python
 
  shutil.copytree()
 
 method. The
 
  copytree()
 
 method recursively copies all the files of the source directory and pastes into the destination directory.
Python shutil.copytree() Syntax:
shutil.copytree(source, destination, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False, dirs_exist_ok=False)
 
  Parameters:
 
 The
 
  
   source
  
 
 represents the source directory that needs to copy and the
 
  
   destination
  
 
 parameter represents the location directory where the source directory shall be copied.
 The
 
  
   dirs_exist_ok
  
 
 parameter is also very important. It signifies whether to raise an exception if the destination directory already exists or not. The default value of
 
  
   dirs_exist_ok
  
 
 is
 
  
   False
  
 
 . This means we can not copy the source directory to the existing directory.
 We also need to specify a new directory where we want to copy all the files and folders of the source directory. If we set it to
 
  
   True
  
 
 , we can paste the source directory data into the existing directory.
 
  Note:
 
 Apart from source and destination, all the other parameters are optional. Similar to the copy() and copy2() method, the
 
  copytree()
 
 method returns the destination directory.
Python Program to Copy a Directory in Python
source directory : C:\Users\tsmehra\dev\example
 
destination directory: D:\example2\copied_dir
 
#Python program to copy directory
import shutil
source = r"C:\Users\tsmehra\dev\example"
destination = r"D:\example2\copied_dir" 
print("The directory has copied at:")
#this will create a new directory by name copied_dir
print(shutil.copytree(source, destination))
Output
The directory has copied at:
D:\example2\copied_dir
Now let's check the D:\example2\ directory again.
 
 Here you can see that, the
 
  shutil.copytree()
 
 method creates a new directory with the name
 
  
   copied_dir
  
 
 and pastes all the data of
 
  
   C:\Users\tsmehra\dev\example
  
 
 into it. If we have specified the
 
  dirs_exist_ok=True
 
 , the
 
  
   example
  
 
 directory data will be copied to the
 
  
   example2
  
 
 directory.
import shutil
source = r"C:\Users\tsmehra\dev\example"
destination = r"D:\example2"
print("The directory has copied at:")
print(shutil.copytree(source, destination, dirs_exist_ok=True))
Conclusion
 In this Python tutorial, we learned how to write a Python program to copy a file, its metadata and an entire directory. You also learned the difference between
 
  shutil.copy()
 
 and
 
  shutil.copy2()
 
 .
 With the
 
  shutil.copy()
 
 method, we can only copy the file and paste it to the destination. The
 
  shutil.copy2()
 
 method, however, not only copies the file but also maintains the metadata. Also, the
 
  shutil.copytree()
 
 method can copy the entire directory to the specified destination.
People are also reading:
- How to use Gmail API in python to send mail?
 - Install python package using jupyter notebook?
 - Python readline method with examples
 - How to extract all stored chrome password with python
 - Python Counter in Collection
 - How to automate login using selenium in python
 - Python map() function with Examples
 - How to delete emails in Python
 - Python Coding on MacBook
 - Reading and writing CSV files in python using CSV module pandas