python - 遍历路径的子文件夹及所有文件

本文介绍了一个使用Python实现的递归函数,该函数可以遍历指定路径下的所有子文件夹及文件,并打印出每个文件的完整路径。适用于需要对文件系统进行深度遍历的场景。
import os
def search_dir(path):
    files= os.listdir(path) # 得到文件夹下的所有文件名称
    # print(files)
    for file in files: # 遍历该文件夹
        if os.path.isdir(path+"\\"+file): # 是子文件夹
            search_dir(path+"\\"+file)
        else: # 是文件
            print(path, "\\", file)
path = r"C:\Users\日志" # 文件夹目录
search_dir(path)

<think>我们有两个引用,引用[1]和引用[2]都涉及遍历文件夹下所有文件的方法。用户的问题很明确:遍历指定文件夹下所有文件夹中的所有文件。 根据引用[1]和引用[2],我们可以使用os.walk方法来实现,因为它会递归遍历文件夹及其文件夹。 引用[1]中展示了os.walk的用法,引用[2]也使用了os.walk并封装成了一个函数。 我们将按照以下步骤: 1. 使用os.walk遍历指定文件夹。 2. 对于每个遍历到的目录,获取该目录下的所有文件(不包括子目录,但子目录会在后续遍历中处理)。 3. 对每个文件进行读取操作(用户要求读取,所以我们需要打开文件并读取内容)。 注意:用户要求的是“遍历读取”,因此除了遍历,我们还需要读取文件内容。 我们将提供一个函数,可以遍历指定文件夹下的所有文件夹中的文件,并读取每个文件的内容。 考虑到文件可能有不同的编码,我们可以使用通用的方式(如指定编码为utf-8)或根据文件类型处理。但用户没有指定编码,我们可以默认使用utf-8,同时捕获可能的异常。 另外,如果遇到大文件,一次性读取可能造成内存问题,但我们假设文件不大。如果文件很大,可能需要分块读取,但用户没有特别说明,我们先按常规读取。 我们将编写一个函数,它接收一个文件夹路径作为参数,然后遍历文件夹下所有文件,读取每个文件的内容并返回一个字典(文件路径: 文件内容)或者进行其他操作(如打印内容)。 但是,如果文件非常多,返回所有内容可能占用大量内存,所以我们可以考虑提供一个生成器版本或者让用户自己决定如何处理每个文件(例如,使用回调函数)。 不过,用户的问题只是询问“方法”,我们可以提供两种方式: 方式一:一次性读取所有文件内容并返回字典(适用于文件数量不多且文件不大的情况)。 方式二:遍历过程中处理每个文件(例如打印内容或进行其他操作),不保存所有内容,节省内存。 我们根据引用[2]中的函数进行扩展,增加读取文件内容的部分。 由于用户要求“读取”,我们假设需要获取内容,所以我们提供两种方法,并说明各自的适用场景。 同时,我们需要注意文件路径的拼接,使用os.path.join。 下面我们给出代码示例: </think> ### Python遍历读取指定文件夹下所有文件夹中的文件Python中,使用`os.walk()`函数是最简洁有效的方法来遍历指定文件夹及其所有文件夹中的文件。以下是一个完整的实现方案: ```python import os def read_all_files(root_folder): """遍历读取文件夹下所有文件夹中的文件内容""" file_contents = {} # 遍历文件夹结构 for foldername, subfolders, filenames in os.walk(root_folder): for filename in filenames: # 构建文件完整路径 file_path = os.path.join(foldername, filename) try: # 读取文件内容(使用utf-8编码) with open(file_path, 'r', encoding='utf-8') as file: content = file.read() file_contents[file_path] = content except UnicodeDecodeError: # 处理非文本文件或不同编码 try: with open(file_path, 'rb') as file: content = file.read() file_contents[file_path] = f"<二进制文件内容: {len(content)}字节>" except Exception as e: file_contents[file_path] = f"<读取错误: {str(e)}>" except Exception as e: file_contents[file_path] = f"<读取错误: {str(e)}>" return file_contents # 使用示例 if __name__ == '__main__': target_folder = '/path/to/your/folder' # 替换为你的目标文件夹路径 all_files_content = read_all_files(target_folder) # 打印结果 for file_path, content in all_files_content.items(): print(f"文件: {file_path}") print(f"内容预览: {content[:100]}...") # 只显示前100字符 print("-" * 50) ``` ### 关键特性: 1. **递归遍历**:使用`os.walk()`自动处理所有文件夹 2. **异常处理**: - 自动处理文本文件(UTF-8编码) - 智能处理二进制文件(显示大小而非内容) - 捕获所有读取异常 3. **返回结构**:字典形式返回,键为文件路径,值为文件内容 4. **内存优化**:使用`with open()`上下文管理器确保文件正确关闭 ### 使用说明: 1. 将`target_folder`替换为你的实际文件夹路径 2. 函数返回包含所有文件内容的字典 3. 对于大文件,建议添加分块读取逻辑(见下方相关问题) > 此方法适用于Python 3.5+所有版本,无需额外安装库[^1][^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值