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

yizhihongxing

下面是详细的讲解:

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

在 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日

相关文章

  • 详析Python面向对象中的继承

    详析Python面向对象中的继承 1. 继承的基本概念 继承是面向对象编程中的一个重要概念。通过继承,子类可以继承父类的属性和方法,同时还可以在此基础上添加新的属性和方法或者对父类的方法进行重写。 在Python中,使用关键字class来声明一个类,使用()来表示该类的父类,即继承的基类。一个子类可以有多个父类,此时使用()将多个基类名称以逗号隔开即可。 2…

    other 2023年6月26日
    00
  • myeclipse2017破解安装教程+开发环境部署(jdk+tomcat)

    MyEclipse 2017 破解安装教程+开发环境部署(JDK + Tomcat) MyEclipse 是一款基于 Eclipse 进行扩展开发的企业级 Java 开发工具,主要用于开发 J2EE Web 应用程序。MyEclipse 2017 是最新版本,具有更快的性能和更多的功能,这里提供 MyEclipse 2017 的破解安装教程和开发环境部署方法…

    其他 2023年3月29日
    00
  • js自定义鼠标右键的实现原理及源码

    接下来我将详细讲解如何实现 js 自定义鼠标右键的效果。 一、实现原理 1. 监听鼠标右键事件 要实现自定义鼠标右键,我们首先需要监听鼠标事件,判断是否在右键上单击。在 JavaScript 中,可以使用 contextmenu 事件来监听右键事件。 // 监听右键事件 document.addEventListener(‘contextmenu’, fun…

    other 2023年6月27日
    00
  • 织梦dedecms整合添加ckplayer播放器支持flv,mp4等播放功能

    添加CKPlayer播放器,为DedeCMS网站提供支持FLV、MP4等格式的视频播放功能是一项非常实用的工作,下面是整合添加CKPlayer播放器支持FLV、MP4等播放功能的完整攻略: 1、下载所需文件 鄙人提供一个CKplayer.aspx文件下载,这里我们使用的是ASP.NET的版本。 2、上传文件到网站项目根目录 将下载好的CKplayer.asp…

    other 2023年6月27日
    00
  • mysql两个count求和

    MySQL两个Count求和 在数据统计中,Count函数是被广泛使用的一个函数。Count函数的作用是计算指定列的行数,从而得到统计结果。有时候,我们需要求两个Count结果的和,本文将介绍如何使用MySQL来实现这种求和操作。 1. 使用嵌套子查询 一种方法是使用嵌套子查询来实现这种求和操作。下面是示例代码: SELECT (SELECT COUNT(*…

    其他 2023年3月28日
    00
  • 基于PostgreSql 别名区分大小写的问题

    基于PostgreSQL 别名区分大小写的问题攻略 在PostgreSQL中,别名是用于给表、列或函数等数据库对象起一个替代的名称。默认情况下,PostgreSQL是不区分别名的大小写的,这意味着你可以使用任何大小写组合来引用别名。然而,有时候我们可能需要在别名中区分大小写。下面是解决这个问题的完整攻略。 步骤1:创建区分大小写的别名 要创建区分大小写的别名…

    other 2023年8月16日
    00
  • Powershell中创建自定义对象例子

    以下是使用标准的Markdown格式文本,详细讲解在PowerShell中创建自定义对象的完整攻略: PowerShell中创建自定义对象的方法 使用New-Object命令创建自定义对象:PowerShell中可以使用New-Object命令创建自定义对象。按照以下步骤进行操作: 定义自定义对象的属性:首先,需要定义自定义对象的属性。可以使用Add-Mem…

    other 2023年10月15日
    00
  • 电脑提示错误:此卷不包含可识别的文件系统的解决办法

    电脑提示错误:此卷不包含可识别的文件系统的解决办法 背景 在使用电脑的过程中,我们有时会遇到“此卷不包含可识别的文件系统”的错误提示,此时我们无法访问该存储设备中的文件,这对我们的日常操作会造成很大的困扰,本文将介绍如何解决该问题。 原因 不可识别文件系统错误提示通常出现在存储设备(如U盘、硬盘等)因为文件系统损坏或其他原因不能被电脑识别时,会导致该设备无法…

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