使用 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日

相关文章

  • flask:api接口开发

    以下是详细讲解“Flask: API接口开发”的完整攻略: 步骤1:安装Flask 在开始开发 Flask API 接口之前,我们先安装 Flask。可以以下命令在 Python 环境中安装 Flask: pip install Flask 步骤2:写API接口 在安装 Flask 后,我们可以开始编写 API 接口。以下是一个简单的示例,演示如何使用 Fl…

    other 2023年5月8日
    00
  • Win10如何让文件显示后缀名默认是不显示的

    要让Windows 10默认不显示文件后缀名,您可以按照以下步骤进行设置: 打开“文件资源管理器”(也称为“资源管理器”)。 在资源管理器窗口的顶部菜单栏中,单击“查看”选项卡。 在“查看”选项卡的“显示/隐藏”部分,找到并单击“文件名扩展名”复选框。此时,文件后缀名将不再显示。 如果您希望更改此设置为全局设置,即适用于所有文件夹,可以执行以下步骤: 在资源…

    other 2023年8月5日
    00
  • 在js或css后加?v= 版本号不让浏览器缓存

    在JavaScript或CSS文件的URL后面添加版本号参数可以防止浏览器缓存文件,确保用户能够获取最新的文件版本。这可以通过在URL后面添加\”?v=版本号\”来实现,其中版本号可以是任何字符串,通常是一个数字或日期。 以下是两个示例说明: 示例1:使用时间戳作为版本号 <link rel=\"stylesheet\" href=…

    other 2023年8月2日
    00
  • js中的异步获取到的数据到底能不能赋值给一个全局变量问题

    异步获取数据的问题 在JavaScript中,异步获取数据是一种常见的操作。然而,由于JavaScript是单线程的,异步操作会导致代码执行顺序的不确定性,这就引发了一个问题:异步获取到的数据能否被赋值给一个全局变量? 问题的本质 问题的本质在于异步操作的执行顺序和同步代码的执行顺序不一致。当我们执行异步操作时,JavaScript会继续执行后续的代码,而不…

    other 2023年7月29日
    00
  • 浅谈PostgreSQL的客户端认证pg_hba.conf

    Pg_hba.conf文件是PostgreSQL数据库服务器配置中的一份非常关键的文件。它决定了客户端如何才能连接上PostgreSQL服务器,同时也控制了各种用户的访问权限。在本文中,我们将会深入浅出地介绍pg_hba.conf文件的相关知识。 什么是pg_hba.conf pg_hba.conf(Host-based Authentication)是一份…

    other 2023年6月27日
    00
  • java-使用googlegson将string转换为json数组

    Java使用Google Gson将String转换为JSON数组 在Java中,我们可以使用Google Gson库将String类型的数据转换为JSON数组。本文将提供一个完整的攻略,介绍如使用Google Gson库将String类型的数据转换为JSON数组。 步骤1:导入Google Gson库 在使用Google Gson库之前,我们需要将其导入到…

    other 2023年5月8日
    00
  • iphone手机内存存储容量不足怎么办?iPhone显示存储空间不足解决方法

    iPhone手机内存存储容量不足怎么办?iPhone显示存储空间不足解决方法 如果你的iPhone手机内存存储容量不足,以下是一些解决方法,可以帮助你释放存储空间并优化手机性能。 1. 删除不必要的文件和应用程序 首先,你可以删除一些不必要的文件和应用程序来释放存储空间。以下是一些示例: 照片和视频:在iPhone的相册中,你可以选择删除一些不需要的照片和视…

    other 2023年8月1日
    00
  • 配置IP地址的批处理代码

    配置IP地址的批处理代码攻略 配置IP地址的批处理代码可以帮助你自动化网络配置过程,提高效率。下面是一个详细的攻略,包含了两个示例说明。 步骤1:了解IP地址的基本知识 在开始编写批处理代码之前,你需要了解一些IP地址的基本知识。IP地址由四个数字组成,每个数字的取值范围是0到255。例如,192.168.0.1是一个常见的IP地址。 步骤2:编写批处理代码…

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