Python 快速获取本地目录文件及子目录文件:哪种耗时短?

在处理大量文件时,快速获取本地目录文件及其子目录文件是至关重要的。Python 提供了多种方法来实现这一目标,但它们的性能可能会有所不同。本文将介绍两种常用的方法,并比较它们的耗时。

方法一:使用 os.walk()

os.walk() 是 Python 标准库 os 中的一个函数,它可以遍历一个目录及其所有子目录,并返回每个目录的路径、目录名和文件名。

import os

def get_files_with_os_walk(root_dir):
    file_list = []
    for dirpath, dirnames, filenames in os.walk(root_dir):
        for filename in filenames:
            file_list.append(os.path.join(dirpath, filename))
    return file_list

root_dir = "/path/to/your/directory"
files = get_files_with_os_walk(root_dir)
print(files)

方法二:使用 glob.glob()

glob.glob() 是 Python 标准库 glob 中的一个函数,它可以查找与指定模式匹配的所有路径名。通过递归地调用 glob.glob(),我们可以获取目录及其子目录中的所有文件。

import glob

def get_files_with_glob(root_dir):
    file_pattern = os.path.join(root_dir, '**', '*')
    return glob.glob(file_pattern)

root_dir = "/path/to/your/directory"
files = get_files_with_glob(root_dir)
print(files)

性能比较

为了比较这两种方法的耗时,我们可以编写一个简单的测试脚本来测量它们获取文件列表所需的时间。

import time

def measure_time(func, root_dir):
    start_time = time.time()
    files = func(root_dir)
    end_time = time.time()
    return end_time - start_time, files

root_dir = "/path/to/your/directory"
time_os_walk, files_os_walk = measure_time(get_files_with_os_walk, root_dir)
time_glob, files_glob = measure_time(get_files_with_glob, root_dir)

print(f"os.walk()耗时: {time_os_walk:.2f}秒")
print(f"glob.glob()耗时: {time_glob:.2f}秒")

旅行图

以下是使用 os.walk()glob.glob() 获取文件的旅行图:

journey
    A[开始] --> B[选择方法]
    B --> C[使用os.walk()]
    B --> D[使用glob.glob()]
    C --> E[遍历目录]
    D --> F[查找匹配文件]
    E --> G[返回文件列表]
    F --> G
    G --> H[结束]

结论

在选择获取本地目录文件及其子目录文件的方法时,需要考虑代码的可读性、易用性和性能。os.walk() 提供了一种简单直观的方式来遍历目录,而 glob.glob() 则允许更灵活的文件匹配模式。在实际应用中,可以根据具体需求和性能测试结果来选择最合适的方法。