首页 > 编程知识 正文

Python遍历文件夹文件名

时间:2023-09-20 16:22:09 阅读:287462 作者:RVBT

本文将从以下几个方面对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)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。