在上面的示例中,我们使用了三个新变量:
- dir_path — 用于存储生成器对象返回的目录(还记得我们在上一节中看到的有关os.walk()的内容)。
- dirs — 用于存储生成器对象返回的子目录。
- files —用于存储生成器对象返回的文件。
函数os.path.join()通过将目录路径与文件名连接起来返回给定文件的完整路径。
我们还在for 循环中使用了列表理解。
如何使用 glob Python 模块列出目录中的文件glob 模块可以返回匹配特定模式的文件的路径。该模块还允许在目录中列出文件。该模块使用通配符来搜索文件。
例如,如果我们只想列出文本文件,那么我们使用通配符 ( .txt )。
import Glob
directory = '/Users/elio/temp/test_dir/*'
file_paths = glob.glob(directory)
print(file_paths)
导入 glob 模块后,我们指定了目录的路径,我们使用通配符(*)表示搜索所有文件和目录。
然后我们将它传递给 glob.glob 函数:
如果你只想匹配 .txt 文件,你可以更新以下行:
directory = '/Users/elio/temp/test_dir/*.txt'
使用 Python glob 模块列出目录中文件的一个好处是,这种方法会自动包含每个文件的完整路径。
在我们之前看到的os.listdir()和os.walk()示例中,情况并非如此。
使用 Glob Python 模块以递归方式显示目录中的文件在我们在上一节末尾创建的程序的输出中,你看不到数据目录中的文件tech.txt 。为此,你必须递归地列出文件。
要使用 Python glob 模块递归地列出目录中的文件,你必须将递归参数传递给 glob.glob() 函数并将其设置为 True。递归参数默认为 False。你还必须在你使用的模式中使用双星号。
我们将对上一节的代码进行两个更改:
- 用双星号 (**)替换目录变量末尾的星号。
- 将附加参数传递给glob函数 ( recursive = True )。
import glob
directory = '/Users/elio/temp/test_dir/**'
file_paths = glob.glob(directory, recursive= True )
print (file_paths)
我们在传递给glob()函数的目录模式中使用的双星号仅在recursive为 True 时适用。
使用 Python PathLib 模块列出目录中的文件PathLib 是另一个提供强大功能来处理文件的 Python 模块。
我们将使用Path()类来定义目录的路径,然后我们将使用iterdir()来遍历目录。
然后,我们使用is_file()方法来检查我们是否正在处理文件。
import pathlib
directory = '/Users/elio/temp/test_dir/'
file_paths = []
for file in pathlib.Path(directory).iterdir():
if file.is_file():
file_paths.append(file)
print(file_paths)