使用 Python 实现文件递归遍历的三种方式

下面是详细的讲解:

一、递归遍历文件方法介绍

在 Python 中,文件递归遍历主要有以下三种方式:

1. os 模块下的 walk 方法

os 模块提供了一个 walk 方法,该方法可以在文件或目录中递归搜索所有文件并返回一个包含当前文件夹路径、子文件夹列表和文件列表的元组。

代码示例如下:

import os

def recurse_folder(folder_path):
    for root, dirs, files in os.walk(folder_path):
        print(f'当前文件夹路径:{root}')
        print(f'子文件夹列表:{dirs}')
        print(f'文件列表:{files}')

上面的代码会递归遍历指定的 folder_path 文件夹,并输出每个文件夹的路径、子文件夹列表和文件列表。

2. pathlib 模块的 Path 方法

pathlib 模块是 Python3 中的新增模块,提供了一种简化和更好的处理文件路径的方法。在其中,pathlib.Path 类可以处理文件和文件夹路径,并可以递归遍历文件或目录。

代码示例如下:

import pathlib

def recurse_folder(folder_path):
    for item in pathlib.Path(folder_path).rglob('*'):
        print(item)

上面的代码使用 pathlib 模块的 Path 类递归遍历指定的 folder_path 文件夹,并输出每个文件或文件夹的完整路径。

3. glob 模块的 glob 方法

glob 模块是 Python 内置模块,提供了一个匹配文件路径的方法 glob.glob()。该方法返回一个包含与指定 pattern 匹配的文件路径和文件夹路径的列表。

代码示例如下:

import glob

def recurse_folder(folder_path):
    for file_path in glob.glob(folder_path + '/**/**', recursive=True):
        print(file_path)

上面的代码使用 glob.glob() 函数递归遍历指定的 folder_path 文件夹,并输出每个文件或文件夹的完全路径。

二、示例说明

下面给出两个示例来说明文件递归遍历的使用方法。

示例一

假设要递归遍历一个文件夹,找出其中的所有 .txt 文件,并输出它们的文件路径和文件内容。

使用 os 模块的 walk 方法实现的代码如下:

import os

def find_txt_files(folder_path):
    for root, dirs, files in os.walk(folder_path):
        for file in files:
            if file.endswith('.txt'):
                file_path = os.path.join(root, file)
                with open(file_path, 'r') as f:
                    content = f.read()
                    print(f'文件路径:{file_path}')
                    print(f'文件内容:{content}')

使用 pathlib 模块的 Path 方法实现的代码如下:

import pathlib

def find_txt_files(folder_path):
    for file_path in pathlib.Path(folder_path).rglob('*.txt'):
        with open(file_path, 'r') as f:
            content = f.read()
            print(f'文件路径:{file_path}')
            print(f'文件内容:{content}')

同时使用 glob 模块的 glob 方法和 open 方法实现的代码如下:

import glob

def find_txt_files(folder_path):
    for file_path in glob.glob(folder_path + '/**/*.txt', recursive=True):
        with open(file_path, 'r') as f:
            content = f.read()
            print(f'文件路径:{file_path}')
            print(f'文件内容:{content}')

示例二

假设要递归遍历一个文件夹,找出其中所有的 .png 文件和 .jpg 文件,并将它们拷贝到另一个文件夹。

使用 os 模块的 walk 方法实现的代码如下:

import os
import shutil

def copy_image_files(folder_path, target_folder):
    if not os.path.exists(target_folder):
        os.mkdir(target_folder)

    for root, dirs, files in os.walk(folder_path):
        for file in files:
            if file.endswith(('.png', '.jpg')):
                file_path = os.path.join(root, file)
                shutil.copy(file_path, target_folder)
                print(f'已复制文件:{file_path}')

使用 pathlib 模块的 Path 方法实现的代码如下:

import pathlib
import shutil

def copy_image_files(folder_path, target_folder):
    if not os.path.exists(target_folder):
        os.mkdir(target_folder)

    for file_path in pathlib.Path(folder_path).rglob('*.*'):
        if file_path.suffix in ('.png', '.jpg'):
            shutil.copy(file_path, target_folder)
            print(f'已复制文件:{file_path}')

同时使用 glob 模块的 glob 方法和 shutil 模块实现的代码如下:

import glob
import shutil

def copy_image_files(folder_path, target_folder):
    if not os.path.exists(target_folder):
        os.mkdir(target_folder)

    for file_path in glob.glob(folder_path + '/**/*.+(png|jpg)', recursive=True):
        shutil.copy(file_path, target_folder)
        print(f'已复制文件:{file_path}')

以上就是使用 Python 实现文件递归遍历的三种方式的完整攻略以及两个示例说明。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用 Python 实现文件递归遍历的三种方式 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • PHP的变量类型和作用域详解

    PHP的变量类型和作用域详解 PHP是一种动态类型的编程语言,它允许在运行时根据需要改变变量的类型。在PHP中,变量的类型和作用域是非常重要的概念。本攻略将详细讲解PHP的变量类型和作用域。 变量类型 PHP支持多种变量类型,包括以下几种常见的类型: 整型(Integer):用于表示整数值,例如$num = 10;。 浮点型(Float):用于表示带有小数点…

    other 2023年7月29日
    00
  • 关于sql:mysql-使用groupby和desc

    关于SQL: MySQL – 使用GROUP BY和DESC 在MySQL中,我们可以使用GROUP BY和DESC关键字来对查询结果进行组和排序。本攻略将详细介绍如何使用GROUP BY和DESC关键字。 问题描述 我们需要对MySQL数据库数据进行分组和排序。具体说,我们需要按照某个列的值进行分组,并按照另一个列的值进行降序。 解方法 要解决“使用GRO…

    other 2023年5月9日
    00
  • suroot认证失败的解决方法

    suroot认证失败的解决方法 问题描述 在使用su命令切换到root用户时,输入密码后提示suroot认证失败,无法切换到root用户的情况。 问题分析 密码输入错误 suroot用户不存在或权限不足 su命令被禁用 解决方法 1.检查密码输入 首先要检查输入密码是否正确,密码输入错误是最常见的问题之一。所以在输入密码时,要认真检查输入是否正确。 2.检查…

    其他 2023年3月28日
    00
  • 白夜追凶一家五口谁杀的

    “白夜追凶”是一部中国大陆的犯罪悬疑剧,讲述了一起家庭灭门案的调查过程。在剧中,警方通过各种手段,最终揭开了真相。下面是“白追凶”一家五口谁杀的的完整攻略,包括两个示例说明。 方法一:分析案件细节 在调查家庭灭门案件时,我们需要仔细分析案件细节,包括现场痕迹、死者遗物、家庭成员关系等。通过分析这些细节,我们可以逐步缩小嫌疑人范围,最终找到真凶。下面是一个示例…

    other 2023年5月9日
    00
  • 未能添加对***.dll的引用问题解决方法

    以下是解决“未能添加对***.dll的引用问题”的完整攻略,包括以下步骤: 确认引用的DLL文件是否存在 检查DLL文件是否被占用 检查引用的DLL文件是否与项目的目标框架兼容 检查引用的DLL文件是否需要其他依赖项 清理和重建项目 示例说明 步骤一:确认引用的DLL文件是否存在 在解决“未能添加对***.dll的引用问题”之前,需要先确认引用的DLL文件是…

    other 2023年5月9日
    00
  • linux下32位机与64位机基本数据类型长度区别介绍

    下面是“Linux下32位机与64位机基本数据类型长度区别介绍”的攻略。 什么是32位和64位机 在计算机中,我们常称32位和64位指的是CPU(中央处理器)的寻址能力,即能够处理的最大内存地址的位数决定了CPU的位数。32位CPU最多能够处理2^32=4GB的内存,而64位CPU最多能够处理2^64的内存,数量级是32位CPU的16倍。 基本数据类型长度 …

    other 2023年6月26日
    00
  • CSS 中的六个重要选择器(三秒就可以记住)

    CSS 中的六个重要选择器(三秒就可以记住) 1. ID 选择器 (#) ID 选择器通过元素的 id 属性来选择元素,并且 id 在整个页面中是唯一的。使用 # 加上 id 名称来定义 ID 选择器。 示例代码: <div id="my-element">Hello, world!</div> #my-eleme…

    other 2023年6月28日
    00
  • linux系统测试–io测试工具之fio详解

    fio是一款用于测试Linux系统I/O性能的工具,它可以模拟各种不同的I/O负载,并提供详细的性能报告。以下是关于fio的详细攻略: 安装fio 在Linux系统上安装fio非常简单,只需要使用系统的包管理器即可。例如,在Ubuntu系统上,可以使用以下命令安装fio: sudo apt-get install fio 编写fio测试文件 fio测试文件是…

    other 2023年5月8日
    00
合作推广
合作推广
分享本页
返回顶部