Python 如何查找具有特定扩展名的文件

Jinku Hu 2023年1月30日
  1. glob.glob 查找具有特定扩展名的文件的方法
  2. os.listdir() 查找具有特定扩展名的文件的方法
  3. pathlib.glob 查找具有特定扩展名的文件的方法
  4. 在 Python 中的目录及其子目录中查找具有特定扩展名的文件
  5. pathlib 递归地搜索模块文件
Python 如何查找具有特定扩展名的文件

本文介绍了在 Python 中查找具有特定扩展名的文件的不同方法。

glob.glob 查找具有特定扩展名的文件的方法

我们可以使用 Python 中的 glob.glob 模块来查找具有特定扩展名的文件。

import glob

targetPattern = r"C:\Test\*.txt"
glob.glob(targetPattern)

上面的代码演示了如何列出目录 C:\Test 中具有扩展名位 txt 的文件。

os.listdir() 查找具有特定扩展名的文件的方法

os.listdir() 函数列出给定目录中的所有文件,但不包含文件路径信息。你可以使用 str.endswith() 函数提取具有特定扩展名的文件。

>>> import os
>>> fileDir = r"C:\Test"
>>> fileExt = r".txt"
>>> [_ for _ in os.listdir(fileDir) if _.endswith(fileExt)]
['test.txt', 'test1.txt']

你需要使用 os.path.join() 函数构造完整路径。

>>> import os
>>> fileDir = r"C:\Test"
>>> fileExt = r".txt"
>>> [os.path.join(fileDir, _) for _ in os.listdir(fileDir) if _.endswith(fileExt)]
['C:\\Test\\test.txt', 'C:\\Test\\test1.txt']

pathlib.glob 查找具有特定扩展名的文件的方法

Python 3.4 中引入了 pathlib 模块,提供了面向对象的文件系统路径。它提供两种样式:Windows OS 中的 Windows 路径和 Unix 类系统中的 POSIX 路径。

>>> import pathlib
>>> fileDir = r"C:\Test"
>>> fileExt = r"*.txt"
>>> list(pathlib.Path(fileDir).glob(fileExt))
[WindowsPath('C:/Test/test.txt'), WindowsPath('C:/Test/test1.txt')]

结果用 WindowsPath 表示,你可以通过 str() 函数将结果转换为字符串表示形式,例如

>>> [str(_) for _ in pathlib.Path(fileDir).glob(fileExt)]
['C:\\Test\\test.txt', 'C:\\Test\\test.txt']

在 Python 中的目录及其子目录中查找具有特定扩展名的文件

模式 C:\Test\*.txt 仅在 C:\Test 目录中查找 txt 文件,而不在其子目录中查找文件。如果你还想在子目录中查找文件 txt,则可以对模式做一些修改。

import glob

targetPattern = r"C:\Test\**\*.txt"
glob.glob(targetPattern)

Test\*.txt 之间的通配符**表示在目录及其子目录中查找 txt 文件。

pathlib 递归地搜索模块文件

跟在 glob.glob 添加**来递归搜索文件类似,你还可以在 pathlib.Path.glob 方法中添加**来递归查找特定扩展名的文件。

>>> import pathlib
>>> fileDir = r"C:\Test"
>>> fileExt = r"**\*.txt"
>>> list(pathlib.Path(fileDir).glob(fileExt))
[WindowsPath('C:/Test/test.txt'), WindowsPath('C:/Test/test1.txt'), WindowsPath('C:/Test/sub/test1.txt')]
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 创始人。Jinku 在机器人和汽车行业工作了8多年。他在自动测试、远程测试及从耐久性测试中创建报告时磨练了自己的编程技能。他拥有电气/电子工程背景,但他也扩展了自己的兴趣到嵌入式电子、嵌入式编程以及前端和后端编程。

LinkedIn Facebook

相关文章 - Python File