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()
方法则提供了更灵活的通配符匹配能力。