小能豆

如何进行递归子文件夹搜索并返回列表中的文件?

python

我正在编写一个脚本,用于递归遍历主文件夹中的子文件夹并根据特定文件类型构建列表。我在使用该脚本时遇到了问题。当前设置如下:

for root, subFolder, files in os.walk(PATH):
    for item in files:
        if item.endswith(".txt") :
            fileNamePath = str(os.path.join(root,subFolder,item))

问题是subFolder变量拉入的是子文件夹列表,而不是 ITEM 文件所在的文件夹。我之前考虑过对子文件夹运行一个 for 循环,然后加入路径的第一部分,但我想在那之前再检查一下是否有人有什么建议。


阅读 32

收藏
2024-09-12

共1个答案

小能豆

您的问题是由于 os.walk() 的行为导致的。正如您提到的,subFolder 实际上是子文件夹的列表,而不是 ITEM 文件所在的文件夹名称。

在 Python 中,os.walk() 返回三个值:
- root:当前遍历的目录路径。
- dirs(或 subFolder):一个子目录名称的列表(仅名称)。
- files:一个文件名称的列表(仅名称)。

所以,您不需要使用 subFolder 来构建文件的完整路径。相反,您应该使用 rootitem 来形成每个文件的正确路径。

修改后的脚本

您可以按以下方式修改您的脚本:

import os

# 替换为您的主文件夹路径
PATH = 'your_directory_path'

file_list = []  # 初始化一个空列表以存储文件路径

# 递归遍历目录
for root, subFolders, files in os.walk(PATH):
    for item in files:
        if item.endswith(".txt"):
            fileNamePath = os.path.join(root, item)  # 构建完整的文件路径
            file_list.append(fileNamePath)  # 将文件路径添加到列表中

# 打印结果
print(file_list)

变更说明

  1. os.path.join(root, item):使用 rootitem 来构建文件的完整路径。root 是文件所在的目录路径,而 item 是文件名。这样可以直接引用每个文件的位置。
  2. file_list:将所有找到的 .txt 文件路径收集到一个列表中,以便稍后使用或处理。

使用方法

'your_directory_path' 替换为您的主文件夹路径。脚本将递归搜索所有子目录,并列出所有 .txt 文件。

2024-09-12