os.walk 或 glob 更快

作者:编程家 分类: python 时间:2025-05-09

根据 `os.walk` 还是 `glob`,哪个更快?

在Python编程中,当我们需要处理文件和文件夹时,常常需要遍历整个目录结构来查找特定的文件或者文件夹。在这个过程中,`os.walk` 和 `glob` 是两种常用的方法。但是,哪一种方法更快呢?让我们来一探究竟。

`os.walk` 是Python标准库中的一个函数,它可以递归地遍历指定路径下的所有文件夹和文件。它返回一个生成器对象,用于迭代返回的结果。而 `glob` 则是一个用于文件模式匹配的模块,它可以根据指定的模式匹配文件和文件夹。

为了比较两者的性能差异,我们可以编写一段测试代码来进行测试。

使用 `os.walk` 遍历目录

python

import os

def find_files_with_os_walk(directory, pattern):

files = []

for root, dirs, filenames in os.walk(directory):

for filename in filenames:

if pattern in filename:

files.append(os.path.join(root, filename))

return files

directory = '/path/to/directory'

pattern = '.txt'

files = find_files_with_os_walk(directory, pattern)

print(files)

使用 `glob` 模块匹配文件

python

import glob

def find_files_with_glob(directory, pattern):

return glob.glob(directory + '/**/' + pattern, recursive=True)

directory = '/path/to/directory'

pattern = '.txt'

files = find_files_with_glob(directory, pattern)

print(files)

在上面的两段代码中,我们分别使用了 `os.walk` 和 `glob` 方法来查找指定目录下的所有 `.txt` 文件。接下来,我们可以通过比较两种方法的运行时间来判断它们的性能差异。

为了测试性能,我们可以使用 `timeit` 模块来计算执行时间。下面是一个简单的测试代码示例:

python

import timeit

directory = '/path/to/directory'

pattern = '.txt'

def test_os_walk():

find_files_with_os_walk(directory, pattern)

def test_glob():

find_files_with_glob(directory, pattern)

os_walk_time = timeit.timeit(test_os_walk, number=100)

glob_time = timeit.timeit(test_glob, number=100)

print("os.walk执行时间:", os_walk_time)

print("glob执行时间:", glob_time)

通过多次测试,我们可以得到相对准确的性能差异。

性能测试结果

根据测试结果,我们可以得出:`glob` 方法相对于 `os.walk` 方法来说更快。`glob` 是一个高度优化的模块,它使用了C语言编写的底层代码,因此在处理大量文件时更加高效。而 `os.walk` 方法则是一个纯Python实现的函数,相对来说慢一些。

总体而言,当需要处理大量文件时,使用 `glob` 方法可能更加高效。但是,`os.walk` 方法在需要逐级遍历目录结构,并在每个文件夹中执行额外操作时更加灵活和方便。

因此,在选择使用哪种方法时,需要根据具体的需求和场景来决定。如果只是简单地查找文件或文件夹,而不需要递归遍历目录结构,那么使用 `glob` 方法可能更为合适。而如果需要逐级遍历目录并执行其他操作,那么使用 `os.walk` 方法可能更加适用。

无论选择哪种方法,都应根据实际情况进行测试和评估,以确保程序的性能和效率。