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
Leave a Comment on this Post