我正在编写一个脚本,用于递归遍历主文件夹中的子文件夹并根据特定文件类型构建列表。我在使用该脚本时遇到了问题。当前设置如下:
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 循环,然后加入路径的第一部分,但我想在那之前再检查一下是否有人有什么建议。
您的问题是由于 os.walk()
的行为导致的。正如您提到的,subFolder
实际上是子文件夹的列表,而不是 ITEM 文件所在的文件夹名称。
在 Python 中,os.walk()
返回三个值:
- root
:当前遍历的目录路径。
- dirs
(或 subFolder
):一个子目录名称的列表(仅名称)。
- files
:一个文件名称的列表(仅名称)。
所以,您不需要使用 subFolder
来构建文件的完整路径。相反,您应该使用 root
和 item
来形成每个文件的正确路径。
您可以按以下方式修改您的脚本:
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)
os.path.join(root, item)
:使用 root
和 item
来构建文件的完整路径。root
是文件所在的目录路径,而 item
是文件名。这样可以直接引用每个文件的位置。file_list
:将所有找到的 .txt
文件路径收集到一个列表中,以便稍后使用或处理。将 'your_directory_path'
替换为您的主文件夹路径。脚本将递归搜索所有子目录,并列出所有 .txt
文件。