下面是详细的讲解:
一、递归遍历文件方法介绍
在 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技术站