如何使用 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 图片。让我们修改之前的示例来实现这一点。

示例

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

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+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告