Python 列出目录下所有文件

Python 列出目录下所有文件

Python 列出目录下所有文件

在Python中,我们经常会遇到需要获取目录下所有文件的需求。无论是处理文件,备份文件,还是进行文件统计等操作,我们都需要先获得目录下所有文件的列表。

本文将介绍如何使用Python列出目录下所有文件,并提供一些示例代码来演示具体的操作。

1. os 模块

Python的标准库中的 os 模块提供了一系列处理操作系统相关功能的接口,其中包含文件和目录的管理。我们可以使用 os 模块中的一些方法来获取目录下所有的文件。

1.1 使用 os.listdir()

os.listdir() 方法可以返回指定目录中的文件和目录名的列表。我们可以使用该方法来获取目录下的所有文件。

import os

def list_files(directory):
    files = os.listdir(directory)
    return files

下面是一个示例,假设当前目录下有以下结构的文件和目录:

├── dir1
│   ├── file1.txt
│   └── file2.txt
├── dir2
│   ├── file3.txt
│   └── file4.txt
└── file5.txt

我们使用 list_files() 方法来获取当前目录下的所有文件:

files = list_files(".")
print(files)

输出结果为:

['dir1', 'dir2', 'file5.txt']

可以看到,返回的是目录名和文件名的集合,并不包含路径。如果我们想要获取完整的文件路径,可以使用 os.path.join() 方法来拼接路径:

def list_files(directory):
    files = os.listdir(directory)
    files = [os.path.join(directory, f) for f in files]
    return files

在上述示例中,我们遍历文件列表,使用 os.path.join(directory, f) 构建完整的文件路径。

下面是基于修改后的示例获取文件的完整路径:

files = list_files(".")
print(files)

输出结果为:

['./dir1', './dir2', './file5.txt']

1.2 使用 os.walk()

os.walk() 方法是一个非常强大的方法,它可以遍历目录及其子目录下所有文件和目录。返回的是一个生成器,可以循环遍历所有的文件和文件夹。

import os

def list_files(directory):
    files = []
    for root, _, filenames in os.walk(directory):
        for filename in filenames:
            files.append(os.path.join(root, filename))
    return files

下面是一个示例:

files = list_files(".")
print(files)

输出结果为:

['./dir1/file1.txt', './dir1/file2.txt', './dir2/file3.txt', './dir2/file4.txt', './file5.txt']

可以看到,os.walk() 方法返回了当前目录及其子目录下的所有文件的完整路径。

2. glob 模块

除了使用 os 模块,我们还可以使用 glob 模块来获取文件列表。glob 模块提供了一种比较简洁的方式来匹配文件路径,支持使用通配符语法(如:*?)。

2.1 使用 glob.glob()

glob.glob() 方法可以返回所有匹配指定模式的文件名列表。可以使用 * 来匹配任意多个字符,使用 ? 来匹配单个字符。

下面是一个示例,假设目录结构同样为:

├── dir1
│   ├── file1.txt
│   └── file2.txt
├── dir2
│   ├── file3.txt
│   └── file4.txt
└── file5.txt

我们可以使用 glob.glob() 方法来获取所有以 .txt 结尾的文件:

import glob

files = glob.glob("*.txt")
print(files)

输出结果为:

['file5.txt']

可以看到,只返回了当前目录下符合条件的文件。

2.2 使用 glob.iglob()

如果我们的目录结构比较复杂,或者文件较多时,使用 glob.glob() 可能会导致性能问题。这时,我们可以使用 glob.iglob() 方法。

glob.iglob() 方法的返回值是一个迭代器,可以逐个获取匹配指定模式的文件名。它能够避免一次性加载所有文件路径,从而提高效率。

import glob

def list_files(directory):
    files = glob.iglob(os.path.join(directory, '**', '*.txt'), recursive=True)
    return list(files)

下面是一个示例:

files = list_files(".")
print(files)

输出结果为:

['./dir1/file1.txt', './dir1/file2.txt', './dir2/file3.txt', './dir2/file4.txt', './file5.txt']

可以看到,返回了所有以 .txt 结尾的文件的完整路径,包括子目录中的文件。

3. 总结

本文介绍了在Python中如何列出目录下所有文件。我们可以使用 os 模块的 listdir() 方法来获取目录下的所有文件,或者使用 os.walk() 方法来遍历目录及其子目录下所有文件。此外,我们还可以使用 glob 模块提供的 glob()iglob() 方法来匹配文件路径。

在实际应用中,我们可以根据不同的需求选择不同的方法。os.listdir() 方法简单易用,适合于简单的目录结构,而 os.walk() 方法适用于复杂的目录结构和大规模的文件查找。glob.glob()glob.iglob() 方法则提供了更灵活的通配符匹配能力。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程