A2oz

How Do I Merge Two Directories in Python?

Published in Python Programming 3 mins read

Merging two directories in Python involves combining the contents of both directories into a single destination directory. You can achieve this using the shutil module, which provides functions for working with files and directories.

Here's how you can merge two directories:

Using shutil.copytree()

The shutil.copytree() function recursively copies the entire contents of a source directory to a destination directory, creating the destination directory if it doesn't exist.

import shutil

source_dir = 'source_directory'
destination_dir = 'merged_directory'

shutil.copytree(source_dir, destination_dir)

This code will copy all files and subdirectories from source_directory to merged_directory. If merged_directory already exists, an error will be raised.

Handling Existing Destination Directories

To merge directories when the destination directory already exists, you can use the dirs_exist_ok parameter in shutil.copytree(). This parameter allows you to specify whether to overwrite existing files or raise an error.

import shutil

source_dir = 'source_directory'
destination_dir = 'merged_directory'

shutil.copytree(source_dir, destination_dir, dirs_exist_ok=True)

This code will copy the contents of source_directory to merged_directory, overwriting existing files if necessary.

Merging with Overwriting Options

If you want to control how existing files are handled during the merge, you can use the copy2() function in combination with os.walk(). This approach allows you to iterate through the source directory, copy each file to the destination directory, and handle any potential overwrites.

import os
import shutil

source_dir = 'source_directory'
destination_dir = 'merged_directory'

for root, dirs, files in os.walk(source_dir):
    for file in files:
        source_path = os.path.join(root, file)
        destination_path = os.path.join(destination_dir, os.path.relpath(root, source_dir), file)
        shutil.copy2(source_path, destination_path)

This code will copy all files from source_directory to merged_directory. If a file already exists in the destination directory, it will be overwritten.

Important Considerations

  • File Overwrites: Be cautious when merging directories, as overwriting existing files can lead to data loss.
  • Directory Structure: Make sure the directory structure is consistent in both source and destination directories to avoid unexpected results.
  • Permissions: Ensure you have the necessary permissions to access and modify the directories involved in the merge operation.

By understanding these basic concepts and using the appropriate Python functions, you can effectively merge directories and achieve your desired outcome.

Related Articles