如何使用 Python 将特定文件从一个文件夹复制到另一个文件夹?


在广阔的计算机编程领域,高效管理文件和目录的技能至关重要。Python 是一种用途广泛且功能强大的编程语言,它提供了许多工具来高效地操作文件。一个经常遇到的常见任务是需要将特定文件从一个文件夹复制到另一个文件夹。在这篇有益的文章中,我们将深入了解使用 Python 实现这一过程的方法。我们将逐步探讨各种技术,并提供一些实际的代码示例。

了解手头的任务

在我们开始复制文件之前,让我们花点时间来了解任务的本质。目标是扫描源文件夹,根据特定条件识别特定文件,然后将这些选定的文件复制到目标文件夹。我们可以利用 Python 的标准库模块(例如 os、shutil 和 glob)来实现这一点。

复制所有文件

让我们从一个基本示例开始,我们将源文件夹中的所有文件复制到目标文件夹。我们将使用 os 模块迭代源文件夹中的文件,并使用 shutil 模块执行实际的复制操作。

示例

在这个示例中,我们定义了一个函数 `copy_all_files`,它将源文件夹和目标文件夹的路径作为参数。我们使用 `os.listdir()` 获取源文件夹中所有文件的列表,然后遍历它们。对于每个文件,我们使用 `os.path.join()` 构造其完整路径。`os.path.isfile()` 函数检查该项目是否为文件(而不是目录)。如果是文件,我们使用 `shutil.copy()` 将其复制到目标文件夹。

import os
import shutil

def copy_all_files(source_folder, target_folder):
    for filename in os.listdir(source_folder):
        source_file = os.path.join(source_folder, filename)
        if os.path.isfile(source_file):
            shutil.copy(source_file, target_folder)

# Example usage
copy_all_files('source_folder', 'target_folder')

复制具有特定扩展名的文件

有时,我们可能只想复制具有特定扩展名的文件。例如,我们可能只想复制 .txt 文件或 .jpg 图片。让我们修改之前的示例来实现这一点。

示例

在这个修改后的版本中,我们在函数中添加了一个额外的 `extension` 参数。然后,我们在复制文件到目标文件夹之前,检查每个文件的名称是否以指定的扩展名结尾。

import os
import shutil

def copy_files_with_extension(source_folder, target_folder, extension):
    for filename in os.listdir(source_folder):
        source_file = os.path.join(source_folder, filename)
        if os.path.isfile(source_file) and filename.endswith(extension):
            shutil.copy(source_file, target_folder)

# Example usage
copy_files_with_extension('source_folder', 'target_folder', '.txt')

基于文件名模式复制文件

如果我们想根据文件名中的特定模式来复制文件怎么办?例如,我们可能想要复制所有以 "report_" 开头或以 "_final" 结尾的文件。我们可以使用 Python 中的 glob 模块来实现这一点。

示例

在这个示例中,我们定义了一个函数 `copy_files_with_pattern`,它将源文件夹、目标文件夹和所需的模式作为参数。我们使用 `glob.glob()` 获取源文件夹中与指定模式匹配的文件路径列表。

import shutil
import glob

def copy_files_with_pattern(source_folder, target_folder, pattern):
    for file_path in glob.glob(os.path.join(source_folder, pattern)):
        if os.path.isfile(file_path):
            shutil.copy(file_path, target_folder)

# Example usage
copy_files_with_pattern('source_folder', 'target_folder', 'report_*')

复制在日期范围内的修改的文件

有时,我们可能需要复制在特定日期范围内修改的文件。例如,我们可能想要复制过去 7 天内修改的所有文件。让我们探讨如何实现这一点。

示例

在这个示例中,我们定义了一个函数 `copy_files_within_date_range`,它将源文件夹、目标文件夹和天数作为参数。我们使用 `time.time()` 从当前时间减去天数(以秒为单位)来计算截止时间。然后,我们在复制文件到目标文件夹之前,检查每个文件的修改时间(`os.path.getmtime()`)是否大于或等于截止时间。

import shutil
import os
import time

def copy_files_within_date_range(source_folder, target_folder, days):
    cutoff_time = time.time() - days * 86400
    for filename in os.listdir(source_folder):
        source_file = os.path.join(source_folder, filename)
        if os.path.isfile(source_file) and os.path.getmtime(source_file) >= cutoff_time:
            shutil.copy(source_file, target_folder)

# Example usage to copy files modified within the last 7 days
copy_files_within_date_range('source_folder', 'target_folder', 7)

基于文件大小复制文件

最后,让我们探讨如何根据文件大小复制文件。我们可能想要复制所有大于特定大小的文件或特定大小范围内的文件。以下是我们的实现方法。

示例

在这个最后的示例中,我们定义了一个函数 `copy_files_within_size_range`,它将源文件夹、目标文件夹、最小大小和最大大小作为参数。我们使用 `os.path.getsize()` 获取每个文件的大小(以字节为单位),然后在复制文件到目标文件夹之前,检查大小是否在指定范围内。

import shutil
import os

def copy_files_within_size_range(source_folder, target_folder, min_size, max_size):
    for filename in os.listdir(source_folder):
        source_file = os.path.join(source_folder, filename)
        if os.path.isfile(source_file):
            file_size = os.path.getsize(source_file)
            if min_size <= file_size <= max_size:
                shutil.copy(source_file, target_folder)

# Example usage to copy files between 1 MB and 10 MB
copy_files_within_size_range('source_folder', 'target_folder', 1000000, 10000000)

在这篇详尽的文章中,我们探讨了使用 Python 将特定文件从一个文件夹复制到另一个文件夹的不同方法。我们从一个复制所有文件的简单示例开始,然后逐步过渡到更专业的案例,其中我们根据扩展名、文件名模式、修改日期和文件大小复制文件。Python 的标准库模块(例如 os、shutil 和 glob)被证明是完成这些任务的强大工具。掌握了这些知识,您现在可以自信地轻松管理 Python 项目中的文件复制操作。所以,继续前进,利用 Python 的强大功能,掌握文件操作的技巧!

更新于:2023年9月11日

2K+ 次查看

开启您的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.