首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何阻止os.walk遍历所有子目录?

如何阻止os.walk遍历所有子目录?
EN

Stack Overflow用户
提问于 2014-06-04 12:19:23
回答 4查看 831关注 0票数 0

使用:

代码语言:javascript
复制
def simpleFunc(dirName):
    import os
    fileList=[]
    for dir, dirs, filenames in os.walk(dirName):
        for filename in filenames:
            filepath=dir+'/'+filename
            fileList.append(filepath)
    print fileList


simpleFunc(os.path.dirname('/entire/path/to/file.ext'))

问题是os.walk并没有停止在/entire/path/to/目录级别,而是一直到它能找到的最低层的子目录。因此,如果有/entire/path/to/subdir1/subdir2/subdir3,那么除了/entire/path/to/之外,还将搜索所有三个子目录:./subdir1/././subdir2/./././subdir3/。问:如何确保函数停止在指定的目录级别:/entire/path/to/,并且不会一直向下?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-06-04 12:27:00

根据您编写的内容,如果您只想搜索指定的目录。最好使用os.listdir,然后只过滤os.path.isfile,例如,如下所示:

代码语言:javascript
复制
def simple_func(dirpath):
    paths = os.listdir(dirpath)
    # create absolute paths
    abs_paths = [os.path.join(dirpath, p) for p in paths]
    # filter for paths that are files
    file_list = [p for p in paths if os.path.isfile(p)]
    return file_list

这样你就不必停止递归了,而且你想要哪个文件就很清楚了。您可能想要分析一下多个isfile调用是否会造成任何伤害。

票数 2
EN

Stack Overflow用户

发布于 2014-06-04 12:25:50

代码语言:javascript
复制
from os import listdir
from os.path import isfile, join
path='/entire/path/to/'
files = [ join(path,f) for f in listdir(path) if isfile(join(path,f)) ]

files返回您的文件。不需要声明新的文件列表

票数 2
EN

Stack Overflow用户

发布于 2014-06-04 12:33:39

听起来你应该改用os.listdir

代码语言:javascript
复制
import os

my_path = '/entire/path/to/files/'
file_list = []
for filename in os.listdir(my_path):
  filepath = os.path.join(my_path, filename)
  if os.path.isfile(filepath):
    fileList.append(filepath)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24028925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档