python下递归遍历目录和文件

本文介绍了如何在Python中使用os.walk()函数递归遍历目录和文件。os.walk()生成器以(dirpath, dirnames, filenames)的形式返回目录路径、子目录名列表和文件名列表。此外,还讨论了递归实现反向输出文件的方法。" 81216000,7886033,HTTPS证书安装全攻略,"['HTTPS', 'SSL/TLS', '服务器配置', '网站安全']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法一:递归调用:

#!/usr/bin/python
#coding:utf8

import os

def dirlist(path, allfile):
	filelist =  os.listdir(path)

	for filename in filelist:
		filepath = os.path.join(path, filename)
		if os.path.isdir(filepath):
			dirlist(filepath, allfile)
		else:
			allfile.append(filepath)
	return allfile

print dirlist("/home/yuan/testdir", [])	

方法二:

os.walk()

该函数式穿件一个生成器对象来遍历整棵目录树。
top指定目录的顶级,而topdown是一个布尔值,用于指示由上而下(默认值)还是由下而上来遍历目录。返回的生成器将生成元组(dirpath,dirnames,filenames),其中dirpath是一个字符串,包含通向目录的路径,dirnames是dirpath中所有子目录的一个列表,而filename是dirpath中文件的一个列表,不包括目录。oneerror参数是一个接受单个参数的函数。
         如果处理期间出现任何错误,将使用os.error的是咧来调用此函数。默认行为时忽略错误。如果由上而下地遍历目录,修改dirnames将影响到遍历过程。

#!/user/bin/python
#!conding=utf8

import os
g = os.walk("/home/yuan/testdir")


for path,d,filelist in g:
	print d;
	for filename in filelist:
		print os.path.join(path, filename)


递归实现文件反向输出:

#!user/bin/python
fr = open('aa.txt','r')
fw = open('b.txt', 'w+')

def restr(s):                 #递归实现函数
	str1 = s.readline()     
	if len(str1) != 0:
		restr(s)
	fw.write(str1)

restr(fr)	
fr.close()
fw.close()


<think>我们使用os.walk()函数来递归遍历目录及其子目录中的所有文件。 os.walk()生成一个三元组(dirpath, dirnames, filenames): - dirpath: 当前遍历目录路径 - dirnames: 当前目录下的子目录名列表 - filenames: 当前目录下的文件名列表 我们可以通过循环遍历os.walk()的结果,获取每个文件的完整路径。 下面是一个示例代码:</think>要使用Python递归遍历指定目录及其所有子目录中的文件,最简洁高效的方法是使用`os.walk()`函数。以下是实现方法: ### 递归遍历目录Python代码 ```python import os def list_files_recursive(directory): """递归列出目录下所有文件的完整路径""" file_paths = [] for root, _, files in os.walk(directory): for file in files: full_path = os.path.join(root, file) file_paths.append(full_path) return file_paths # 使用示例 target_dir = "/path/to/your/directory" # 替换为你的目标目录 all_files = list_files_recursive(target_dir) # 打印结果 for file_path in all_files: print(file_path) ``` ### 关键组件解析 1. **`os.walk(directory)`** 生成目录树中的每个目录项,返回三元组`(当前目录路径, 子目录列表, 文件列表)`[^1] 2. **嵌套循环结构** - 外层循环处理每个目录节点 - 内层循环处理当前目录文件 3. **`os.path.join()`** 正确拼接路径,确保跨平台兼容性(Windows/Linux/macOS) ### 进阶用法 ```python # 带过滤条件的版本(例如只获取.py文件) py_files = [ os.path.join(root, name) for root, _, files in os.walk("src") for name in files if name.endswith(".py") ] ``` ### 注意事项 1. 符号链接处理:`os.walk()`默认不跟随符号链接,需设置`followlinks=True`参数启用 2. 权限问题:遇到无权限目录时会抛出`PermissionError`,建议添加异常处理 3. 性能优化:对于超大目录,考虑使用生成器节省内存 ```python def generate_files(path): for root, _, files in os.walk(path): for file in files: yield os.path.join(root, file) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值