本文将从以下几个方面对Python遍历文件夹文件名进行详细阐述:
一、遍历整个文件夹
要遍历整个文件夹,可以使用os模块中的walk()函数。它返回一个三元组(dirpath, dirnames, filenames)。其中dirpath是当前目录的路径;dirnames是当前目录下所有子目录的名称列表;filenames是当前目录下所有非目录子文件的名称列表。可以用for循环迭代处理每一个文件名。
import os for root, dirs, files in os.walk("folder_path"): for file_name in files: print(os.path.join(root, file_name))
二、遍历指定深度的文件夹
如果想只遍历指定深度的文件夹,可以使用os模块中的listdir()函数。可以通过递归实现,当指定的深度达到时,不再递归该目录。在每个文件夹中,也需要递归处理到指定深度的文件。
import os def walk_topdown(path, depth): for item in os.listdir(path): item_path = os.path.join(path, item) if os.path.isdir(item_path): if depth == 0: continue yield from walk_topdown(item_path, depth - 1) else: yield item_path for file_path in walk_topdown("folder_path", 2): print(file_path)
三、遍历文件夹中满足条件的文件
如果只想遍历满足条件的文件,可以结合glob模块中的glob()函数使用。glob()函数返回所有匹配指定模式的文件名列表。可以用for循环迭代处理每一个文件名。
import glob for file_path in glob.glob("folder_path/*.txt"): print(file_path)
四、遍历文件夹中的文件夹
如果想遍历文件夹中的所有文件夹,可以使用os模块中的listdir()函数和isdir()函数。可以通过递归实现,在每个文件夹中,也需要递归处理到其子文件夹。
import os def walk_folders(folder_path): for item in os.listdir(folder_path): item_path = os.path.join(folder_path, item) if os.path.isdir(item_path): yield item_path yield from walk_folders(item_path) for folder_name in walk_folders("folder_path"): print(folder_name)
五、过滤文件夹中的文件
如果想过滤掉文件夹中不需要遍历的文件,可以使用fnmatch模块中的fnmatch()函数。fnmatch()函数用于比较一个文件名与一个模式的匹配情况。
import os import fnmatch def walk_filtered(folder_path, pattern): for item in os.listdir(folder_path): item_path = os.path.join(folder_path, item) if os.path.isdir(item_path): yield from walk_filtered(item_path, pattern) elif fnmatch.fnmatch(item, pattern): yield item_path for file_path in walk_filtered("folder_path", "*.txt"): print(file_path)