Copying a File in Python

(Last Updated On: 11/10/2023)

File copying is a fundamental programming process that is frequently used for purposes such as data backup, synchronization, or transferring files between directories. Python’s robust standard library makes file copying a breeze. In this blog, we will look at different ways to copy files in Python using the’shutil’ module.

Python Program to Copying a File

In a Python program, copying a file means creating an exact copy of a file. It’s the same as producing a photocopy of a piece of paper. This is important when you wish to backup a file, distribute it, or move it to a different location. Python provides tools for this, such as the’shutil’ module. These programs not only copy the file’s content, but they also save vital information such as when it was produced or modified. So, copying files in Python is equivalent to producing an extra copy of anything vital without losing any data.

Methods for Copying Files in Python

1. shutil.copyfile(): This method is the simplest: you specify which file to copy and where to place the copy.

2. shutil.copy2(): Similar to the first method but preserves extra information like when the file was created and modified.

3. shutil.copyfileobj(): This method offers greater flexibility, allowing for customized control over the copying process, making it ideal for special use cases.

4. shutil.copy(): This method is versatile which allows you to copy files between directories. You say which file to copy and where to put it.

Python Program to Copying a File Using shutil.copyfile()

# Python Program to Copying a File Using shutil.copyfile()
# shutil.copyfile() method is used to copy the content of source file to destination file

# importing shutil module
import shutil

# path
path = '/home/User/Documents'

# Source path
source = "/home/User/Documents/one.txt"

# Destination path
destination = "/home/User/Documents/one_copy.txt"

# Copy the content of source to destination
dest = shutil.copyfile(source, destination)

# Print path of newly created file
print("Destination path:", dest)

Explanation of the code:

This Python code demonstrates how to use the `shutil.copyfile()` method to copy the contents of one file to another. Here’s an explanation of each part of the code:

1. Importing the shutil Module: imports the `shutil` module, which provides various file operations, including file copying.

2. Defining Paths:

   These lines define three variables:

   – `path` stores a common directory path (you might not need it for this specific operation).

   – `source` stores the path of the source file (“one.txt”) that you want to copy.

   – `destination` stores the path where the copied file should be created (“one_copy.txt”).

3. Copying the File: This line uses the `shutil.copyfile()` method to copy the contents of the `source` file to the `destination` file. It returns the path of the newly created file (i.e., the copied file).

4. Printing the Destination Path: Finally, this line prints the path of the newly created file, which is the `destination` path.

So, when you run this code, it copies the content of “one.txt” to “one_copy.txt” in the specified directory and prints the path of the copied file.

Output:

Destination path: /home/User/Documents/one_copy.txt

Python Program to Copying a File Using shutil.copy2()

Python code that uses the `shutil.copy2()` method to copy a file while preserving its metadata:

# Python Program to Copying a File Using shutil.copy2()
# shutil.copy2() method also preserves the metadata of file

# importing shutil module
import shutil

# path
path = '/home/User/Documents'

# Source path
source = "/home/User/Documents/file1.txt"

# Destination path
destination = "/home/User/Documents/file1_copy.txt"

# Copy the content of source to destination
dest = shutil.copy2(source, destination)

# Print path of newly created file
print("Destination path:", dest)

Explanation of the code:

1. We begin by importing the `shutil` module, which provides file operations like copying.

2. `path` variable is defined but not used in this code snippet, so it can be removed.

3. `source` is set to the path of the source file, which is the file we want to copy, in this case, “file1.txt.”

4. `destination` is set to the path where we want to copy the file, creating a new file named “file1_copy.txt” at the same location.

5. The `shutil.copy2(source, destination)` method is used to copy the content of the source file to the destination while preserving the metadata (timestamps, permissions, etc.).

6. The path of the newly created file is stored in the `dest` variable.

7. Finally, we print the path of the newly created file using `print(“Destination path:”, dest)`.

This code essentially duplicates “file1.txt” as “file1_copy.txt” in the same directory while ensuring that all the metadata of the original file is maintained in the copy.

Output:

Destination path: /home/User/Documents/file1_copy.txt

Python Program to Copying a File Using shutil.copyfileobj()

# Python Program to Copying a File Using shutil.copyfileobj()
# shutil.copyfileobj() method is used to copy the content of source file-like object to destination file-like object

# importing shutil module
import shutil

# Source file
source = 'file1.txt'
 
# Open the source file in read mode and get the file object
fsrc = open(source, 'r')
 
# destination file
dest = 'file1_copy.txt'
 
# Open the destination file in write mode and get the file object
fdst = open(dest, 'w')
 
 
# Now, copy the contents of file object f1 to f2 using shutil.copyfileobj() method
shutil.copyfileobj(fsrc, fdst)
 
# We can also specify the buffer size by passing optional length parameter like shutil.copyfileobj(fsrc, fdst, 1024)
   
print("Contents of file object copied successfully")
 
# Close file objects
f1.close()
f2.close()

Explaination the code:

1. Import the `shutil` module: This line imports the `shutil` module, which provides file operations like copying.

2. Define the source file: The `source` variable is set to ‘file1.txt,’ which is the name of the source file you want to copy.

3. Open the source file in read mode: Using the `open()` function, the source file (‘file1.txt’) is opened in read mode (‘r’). This step creates a file object `fsrc` that can be used to read the contents of the source file.

4. Define the destination file: The `dest` variable is set to ‘file1_copy.txt,’ which is the name of the destination file where you want to copy the contents.

5. Open the destination file in write mode: Similar to the source file, the destination file (‘file1_copy.txt’) is opened in write mode (‘w’). This creates a file object `fdst` that can be used to write the contents to the destination file.

6. Copy the contents using `shutil.copyfileobj()`: The `shutil.copyfileobj(fsrc, fdst)` method is used to copy the contents of the source file (`fsrc`) to the destination file (`fdst`). This method efficiently reads from the source file and writes to the destination file.

7. Print a success message: After the copying process is complete, a message is printed to indicate that the contents of the file object have been copied successfully.

8. Close file objects: Finally, the file objects `fsrc` and `fdst` are closed using the `close()` method. It’s important to close file objects after using them to ensure proper resource management.

Output:

Contents of file object copied successfully

Python Program to Copying a File Using shutil.copy()

This Python code demonstrates how to copy a file using the `shutil.copy()` method.

# Python Program to Copying a File Using shutil.copy()
#shutil.copy() method is used to copy a specified source without metadata to the destination file and then return the path to the newly created file

# importing shutil module
import shutil

#path
path = '/home/User/Documents'
 
 
# Source path
source = "/home/User/Documents/file3.txt"
 
# Destination path
destination = "/home/User/Documents/file3_copy.txt"
 
# Copy the content of source to destination
dest = shutil.copy(source, destination)
 
# Print path of newly created file
print("Destination path:", dest)

Explanation of the code:
1. We start by importing the `shutil` module, which provides functions for file operations.

2. We define the source file’s path, `source`, which is the file we want to copy, and the destination file’s path, `destination`, where we want to create the copy.

3. The `shutil.copy(source, destination)` function is called, which copies the content of the source file to the destination file. This method copies the file without preserving metadata like timestamps.

4. The newly created file’s path is stored in the `dest` variable.

5. Finally, we print the path of the newly created file using `print(“Destination path:”, dest)`.

In this code, we are copying the content of “file3.txt” from the source path to a new file named “file3_copy.txt” in the destination path, and the path to the newly created file is printed as output.

Output:

Destination path: /home/User/Documents/file3_copy.txt

Error Handling

Error handling and best practices are essential when dealing with file copying in Python. Here’s why they matter:

1. Graceful Error Handling: When copying files, unexpected issues can arise, such as the source file not existing, destination directory not being writable, or insufficient permissions. Without proper error handling, these issues can lead to program crashes or data loss.

2. Reliable Copying:  Best practices ensure that the file copying process is reliable. This includes checking if the source file exists before attempting to copy it, verifying the availability of the destination directory, and handling potential errors gracefully.

By incorporating error handling and best practices, your file copying code becomes more robust and reliable, ensuring a smoother experience for users and minimizing the risk of data loss.

Real- Life Applications

Few example of File copying in Python has numerous real-world applications are mentioned below:

1. Backup and Recovery: File copying is often used in backup solutions. You can create automated backup scripts that copy critical files and directories to a backup location. This ensures that data is safe in case of accidental deletion or hardware failures.

2. Data Synchronization: In scenarios where you need to keep two or more directories synchronized, file copying is a valuable tool. For instance, you might have a local directory and a remote server that you want to keep up-to-date. By periodically copying new or modified files, you ensure that both locations contain the same data.

3. Data Migration: When transitioning data from one system or database to another, file copying is useful. You can copy files containing data records while applying custom transformations or data cleansing. This ensures data consistency during migration.

4. Software Distribution: Software developers often use file copying to distribute their applications. By copying executable files, libraries, and resources to user’s computers, you can effectively deploy software updates or new versions.

5. Logs and Reporting: In systems that generate logs or reports, file copying can help organize and archive these files. You can copy log files to a centralized location for analysis or historical records.

6. File Sharing: For file-sharing platforms, copying files between user accounts or directories is a fundamental operation. By allowing users to copy files, you enable them to organize and share their data effectively.

7. Data Replication: In databases and distributed systems, file copying plays a role in data replication. Copies of data files are made to ensure data availability and fault tolerance.
In Python, mastering the art of copying files using methods like `shutil.copyfile()`, `shutil.copy2()`, `shutil.copyfileobj()`, and `shutil.copy()` is essential for various tasks. Error handling ensures reliability, while real-life applications demonstrate the practical utility of these techniques. With these skills, you’re well-equipped to manage file copying challenges in your Python projects.

We hope this blog post has been helpful in understanding Copying a File in Python. For more information on Java programming, please visit our Newtum website. We offer a variety of courses and tutorials that can help you learn Python from beginner to advanced levels. Happy coding!

About The Author

Leave a Reply