📅  最后修改于: 2023-12-03 14:54:03.638000             🧑  作者: Mango
在文件处理过程中,经常会遇到需要获取带有特定扩展名的文件和在目标文件夹中搜索子目录的需求。getfiles
函数可以方便地满足这个需求,本文将介绍如何使用python语言来实现带有扩展名和子目录的getfiles
。
为了实现带有扩展名和子目录的 getfiles,我们可以使用os
和glob
库。os
库用于获取目录和文件信息,glob
库用于搜索符合特定模式的文件路径列表。
下面是我们的代码实现:
import os
import glob
def getfiles(directory, extensions):
"""
获取带有特定扩展名的文件和在目标文件夹中搜索子目录
Args:
directory (str): 目标文件夹路径
extensions (str): 特定扩展名(例如:*.txt)
Yields:
str: 目标文件夹下符合特定扩展名的文件路径列表
"""
for file_path in glob.iglob(os.path.join(directory, extensions), recursive=True):
yield file_path
如上代码所示,我们接受两个参数,一个是目标文件夹路径,另一个是特定扩展名。我们在for
循环内使用glob.iglob
来搜索符合特定模式的文件路径列表,并使用yield
语句来将结果逐个返回。
使用os.path.join
函数将目标文件夹路径和特定扩展名拼接成特定的搜索模式。使用recursive=True
参数将在目标文件夹及其所有子目录中进行搜索。
接下来,让我们看看如何使用getfiles
函数来获取目标文件夹下所有带有 .txt
扩展名的文件路径:
for file_path in getfiles('D:/data/', '*.txt'):
print(file_path)
使用 yield
语句可以保证程序的内存效率,因为它逐个返回结果而不是一次性返回执行结果。在上述代码中,getfiles
函数每次返回一个符合特定扩展名的文件路径,由循环语句进行迭代,直到所有文件搜索完毕。
在文件处理过程中,实现带有扩展名和子目录的 getfiles
函数是很有用的。通过使用os
和glob
库,我们可以轻松地实现带有扩展名和子目录的 getfiles
函数。同时,在程序内使用 yield
语句可以保证程序内存效率,避免出现内存泄漏等意外情况。