Python 列出目录中特定类型的所有文件
Python的灵活特性和强大的库使得操作文件和目录变得非常简单。Python可以生成、更新和检索文件和文件夹中的数据。其中一个常见的需求是列出特定类型的所有文件的目录列表。本教程将通过使用实际示例来演示Python在文件系统操作方面的熟练程度。
介绍Python的os和glob库
标准的Python库有许多可以管理文件系统操作的模块。os和glob模块是两个著名的例子。
- os模块 - Python的os模块提供了与操作系统通信的工具。它提供了用于添加、删除和浏览目录的操作,这对于文件和目录操作非常有用。
-
glob模块 - 另一个强大的工具是glob模块,它使用Unix shell的规则来定位与特定模式匹配的所有路径名。由于它支持通配符字符如*和?,因此非常适合我们的目标。
让我们通过示例来更好地理解它们的用法。
示例1:使用os和Fnmatch模块
在这里,我们将使用Python中的os和fnmatch模块来列出目录中存在的每个.txt文件。
import os
import fnmatch
def list_files(directory, filetype):
for file in os.listdir(directory):
if fnmatch.fnmatch(file, filetype):
print(file)
list_files('/home/user/documents', '*.txt')
在这段代码片段中,os.listdir()函数显示指定目录中的所有文件和目录的列表。然后,fnmatch模块的fnmatch()函数确定每个文件是否与指定的文件类型模式匹配。如果文件类型匹配,则打印文件名。
示例2:使用Glob模块
现在让我们使用glob模块列出目录中存在的每个.jpg图像文件。
import glob
def list_files(directory, filetype):
for file in glob.glob(f"{directory}/{filetype}"):
print(file)
list_files('/home/user/images', '*.jpg')
The glob.glob()函数在此示例中用于返回与路径名模式匹配的路径列表。目录路径和文件类型在f-string中合并。然后,该函数将目录中的.jpg文件打印出来。
示例3:使用Glob模块进行递归搜索
使用glob模块,我们还可以在目录及其子目录中对某种特定类型的文件进行递归搜索。例如,让我们寻找所有.png格式的图片文件。
import glob
def list_files(directory, filetype):
for file in glob.glob(f"{directory}/**/{filetype}", recursive=True):
print(file)
list_files('/home/user/images', '*.png')
在此代码段的路径字符串中的**指示glob在所有文件夹和子目录中执行递归搜索。递归功能是通过recursive=True选项启用的。
示例4:列出所有Python文件
可以使用os和fnmatch模块以以下方式定位和列出特定目录中的每个Python.py文件 –
import os
import fnmatch
def list_files(directory, filetype):
for file in os.listdir(directory):
if fnmatch.fnmatch(file, filetype):
print(file)
list_files('/home/user/my_python_projects', '*.py')
这将列出所有目录中的.py文件的名称。
示例5:使用Os.walk进行递归搜索
此外,我们还可以使用os.walk()进行递归搜索。该函数可以从顶部或底部开始遍历目录树以创建文件名。
import os
import fnmatch
def list_files(directory, filetype):
for dirpath, dirnames, files in os.walk(directory):
for file in files:
if fnmatch.fnmatch(file, filetype):
print(os.path.join(dirpath, file))
list_files('/home/user/projects', '*.txt')
在这个脚本中,使用os.walk()函数遍历目录树。使用fnmatch.fnmatch()函数将每个文件与所需的文件类型进行比较,并使用os.path.join()获取匹配文件的完整路径。
结论
许多编码场景需要列出目录中特定类型的所有文件,而Python的广泛模块集合,如os和glob,提供了一种简单的方法来实现这一点。本文提供的众多实际示例清楚地说明了如何使用这些模块来列出目录中的文件,以及如何在目录和子目录中进行递归搜索。
在你的编程工具箱中拥有处理文件和目录的能力是非常重要的。这些能力对于组织项目文件、查找日志文件甚至自动化系统功能非常有用。继续探索这些例程,以发现Python强大的文件系统管理功能的更多用途。