- How to Copy Files in Python
- 1. Quick Examples
- 2. Python Copy Files using shutil Module
- 2.1 Copy Files without Meta Data using copyfile()
- 2.2 Copy Files with Meta Data using copy2()
- 2.3 Copy only with Permission Data using copy()
- 2.4 shutil.copy() vs shutil.copy2() vs shutil.copyfile()
- Python Copy File – Copying Files to Another Directory
- How To Copy A File Using The shutil.copyfile() Method In Python
- How To Copy A File Using shutil.copy() Method In Python
- How To Copy A File Using The shutil.copy2() Method In Python
- How To Copy A File Using The shutil.copyfileobj() Method In Python
- Conclusion
How to Copy Files in Python
How to copy files in Python? Python provides a variety of ways to work with files, including copying them. In this article, we will explore the different methods for copying files in Python with examples. It’s essential to choose the right function depending on the requirements of the task at hand.
In some cases, it is necessary to preserve the original file’s metadata, such as file permissions and timestamps, while in other cases it may not be necessary. Python provides different functions for copying files that allow for preserving or ignoring metadata.
1. Quick Examples
The following examples will give you a high-level overview of different methods to copy files in python.
2. Python Copy Files using shutil Module
The shutil module provides a number of high-level operations on files and collections of files. In particular, it offers a function shutil.copy() and its variants shutil.copy2() , shutil.copyfile() and shutil.copyfileobj() to copy files in Python.
2.1 Copy Files without Meta Data using copyfile()
The copyfile() function is used to copy the contents of one file to another in Python. It does not copy metadata or permissions, and the destination file cannot be a directory. Here, both the source and destination have to be a filename.
- src (str): The source file path.
- dst (str): The destination file path.
- follow_symlinks (bool): If set to False, it will copy the symbolic link instead of the file it points to.
Important Points to Note while Copying Files:
- It copies the contents from a file named sourcefile.txt to a file named destinationfile.txt .
- The destination location must be writable; If a destination folder or file already exists with read-only permission, an IOError exception will be raised.
- If destinationfile.txt already exists, it will be replaced.
- By using this method you can’t copy files such as characters or block devices and pipes.
- When the complete path is not specified it copies file from the current directory.
2.2 Copy Files with Meta Data using copy2()
This copy2() is used to copy a file from one location to another and preserves the file’s metadata, such as timestamp and permissions. The syntax and the parameter list are very much similar to the shutil.copyfile() method.
Note that it allows dst to be a directory, when used as a directory it copies the file with basename of src .
Below is an example of using shutil.copy2() function.
2.3 Copy only with Permission Data using copy()
The copy() function is used to copy a file from one location to another, it does not copy metadata but preserves file permissions.
See the following example of using the shutil.copy() function.
2.4 shutil.copy() vs shutil.copy2() vs shutil.copyfile()
Below are the comparisons between these three methods. Make sure you choose the right one while working on your project to copy files in Python.
Python Copy File – Copying Files to Another Directory
Dionysia Lemonaki
When working with Python, there may be times when you need to copy a file. Copying files comes in handy when you need to create a backup.
In this article, you will learn how to copy a file in Python using the shutil module and its different methods.
The shutil (short for shell utility) module in Python lets you manipulate files and directories and perform file and directory operations.
How To Copy A File Using The shutil.copyfile() Method In Python
To copy the contents of a file into another file, use the shutil.copyfile() method.
Let’s look at the following example:
# import module import shutil # copy the contents of the demo.py file to a new file called demo1.py shutil.copyfile('./demo.py', './demo1.py')
I first import the module with the import shutil statement.
Then, I use the shutil.copyfile() method which has the following syntax:
shutil.copyfile('source_file', 'destination_file')
- source_file is the path to the file I want to copy – in this case, the file is the demo.py file in my current working directory ( ./ ).
- destination_file is the path to the new file I want to create. In this case, I want to copy the contents of the source file into a new file, demo1.py , in my current working directory. The destination cannot be a directory – it must be a file name.
When I run the code from the example above, a new file named demo1.py gets created in my current working directory with a copy of demo.py ‘s contents. If the destination file already exists, it gets replaced.
Note that the shutil.copyfile() method only copies the contents of the source file.
No file metadata (such as creation dates and modification times) or file permissions are copied over to the specified destination file.
So, the shutil.copyfile() method is useful when you want to rename the file you are copying and are not concerned about saving file permissions and metadata.
How To Copy A File Using shutil.copy() Method In Python
To copy a file to another directory, use the shutil.copy() method.
Let’s look at the following example:
# import the module import shutil # Specify the path of the file you want to copy file_to_copy = './demo.py' # Specify the path of the destination directory you want to copy to destination_directory = './projects' # Use the shutil.copy() method to copy the file to the destination directory shutil.copy(file_to_copy, destination_directory)
I first import the module using the import shutil statement.
Then, I specify the path of the file I want to copy and save it in a variable named file_to_copy . In this case, I want to copy the demo.py file in my current working directory.
Next, I specify the directory I want to copy the file and save it in a variable named destination_directory . In this case, I want to save the file in the projects directory in my current working directory.
Lastly, I use the shutil.copy() method which takes two arguments:
- The path of the file you want to copy – in this case, the variable file_to_copy .
- The file or directory you want to copy the file into – in this case, the variable destination_directory .
When I run the code from the example above, the shutil.copy() method creates a copy of the demo.py file in the projects directory.
Keep in mind that if a file with the same name already exists in the destination directory, the existing file gets overwritten by the new file.
Another thing to keep in mind is that the shutil.copy() method copies file permissions, but it doesn’t copy metadata over to the destination directory.
How To Copy A File Using The shutil.copy2() Method In Python
The shutil.copy2() method works similarly to the shutil.copy() method.
The only difference between shutil.copy() and shutil.copy2() method is that shutil.copy2() preserves the original file metadata when copying.
# import the module import shutil # Specify the path of the file you want to copy file_to_copy = './demo.py' # Specify the path of the destination directory you want to copy the file into destination_directory = './projects' # Use the shutil.copy2() method to copy the file to the destination directory shutil.copy2(file_to_copy, destination_directory)
How To Copy A File Using The shutil.copyfileobj() Method In Python
To copy the contents of a file object to another specified destination file object, use the shutil.copyfileobj() method. This method takes two file objects as arguments – a source file object and a destination file object. The destination cannot be a directory.
Let’s take the following example:
# import module import shutil # you have to open the source file in binary mode with 'rb' source_file = open('demo.py', 'rb') # you have to open the destination file in binary mode with 'wb' destination_file = open('project.py', 'wb') # use the shutil.copyobj() method to copy the contents of source_file to destination_file shutil.copyfileobj(source_file, destination_file)
In the example above, the shutil.copyobj() method copies the contents of demo.py to the project.py file.
Keep in mind that this method does not preserve file permissions and it doesn’t copy metadata.
Conclusion
And there you have it! You now know how to copy files in Python using the shutil module and the methods it offers.
To help you choose which method to use, refer to the following table that summarises what each method does.
Method | Preserves permissions? | Copies metadata? | Can destination be a directory? | Accepts file object? |
---|---|---|---|---|
shutil.copyfile() | No | No | No | No |
shutil.copy() | Yes | No | Yes | No |
shutil.copy2() | Yes | Yes | Yes | No |
shutil.copyfileobj() | No | No | No | Yes |
To learn more about Python, check out freeCodeCamp’s Python for beginners course.
Thanks for reading, and happy coding!