Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中递归遍历目录结构而不使用os.walk_Python_Python 2.7_For Loop_Recursion - Fatal编程技术网

在python中递归遍历目录结构而不使用os.walk

在python中递归遍历目录结构而不使用os.walk,python,python-2.7,for-loop,recursion,Python,Python 2.7,For Loop,Recursion,我试图编写一个python2函数,该函数将递归遍历给定目录的整个目录结构,并打印出结果 所有这些都不使用os.walk 到目前为止,我得到的是: test_path = "/home/user/Developer/test" def scanning(sPath): output = os.path.join(sPath, 'output') if os.path.exists(output): with open(output) as file1:

我试图编写一个python2函数,该函数将递归遍历给定目录的整个目录结构,并打印出结果

所有这些都不使用os.walk

到目前为止,我得到的是:

test_path = "/home/user/Developer/test"

def scanning(sPath):
    output = os.path.join(sPath, 'output')
    if os.path.exists(output):
        with open(output) as file1:
            for line in file1:
                if line.startswith('Final value:'):
                    print line
    else:
        for name in os.listdir(sPath):
            path = os.path.join(sPath, name)
            if os.path.isdir(path):
                print "'", name, "'"
                print_directory_contents(path)

scanning(test_path)
这是我当前得到的,脚本未进入新文件夹:

' test2'
'new_folder'

问题是它不能深入到一个以上的目录。我还希望能够直观地指出什么是目录,什么是文件

尝试使用递归函数

def lastline(fil):
    with open(fil) as f:
        for li in f.readlines():
            if li.startswith("Final Value:"):
                print(li)

## If it still doesnt work try putting 'dirs=[]' here
def lookforfiles(basepath):
    contents = os.listdir(basepath)

    dirs = []
    i = 0

    while i <= len(contents):
        i += 1

        for n in contents:
            f = os.path.join(basepath, n)

            if os.path.isfile(f):
                lastline(f)
                print("\n\nfile %s" % n)
            elif os.path.isdir(f):
                print("Adding dir")
                if f in dirs:
                    pass
                else:
                    dirs.append(f)

    else:   
        for x in dirs:
            print("dir %s" % x)
            lookforfiles(x)
def lastline(fil):
打开(fil)作为f:
对于f.readlines()中的li:
如果li.startswith(“最终值:”):
印刷品(李)
##如果仍然不起作用,请尝试在此处输入'dirs=[]
def lookforfiles(基本路径):
contents=os.listdir(基本路径)
dirs=[]
i=0
而我试试这个:

import os

test_path = "YOUR_DIRECTORY"

def print_directory_contents(dir_path):
    for child in os.listdir(dir_path):
        path = os.path.join(dir_path, child)
        if os.path.isdir(path):
            print("FOLDER: " + "\t" + path)
            print_directory_contents(path)

        else:
            print("FILE: " + "\t" + path)

print_directory_contents(test_path)
我在windows上工作,请验证是否仍在unix上工作。 改编自:

这个问题是重复的


TL;TR:Use
os.listdir

使用递归尝试一下 它非常简单,代码更少

import os

def getFiles(path="/var/log", files=[]):
    if os.path.isfile(path):
        return files.append(path)
    for item in os.listdir(path):
        item = os.path.join(path, item)
        if os.path.isfile(item):
            files.append(item)
        else:
            files = getFiles(item, files)
    return files  



for f in getFiles("/home/afouda/test", []):
    print(f)

lookforfiles函数中的f显示为未解析引用,我做错了什么吗?我自己发现了。我的大脑添加了我手无法理解的代码。刚刚编辑好,哈哈,不用担心,每个人都会这样!虽然我在您的代码中遇到了一个错误:TypeError:conjusting to Unicode:need string或buffer,但在lookforfiles函数的第行:contents=os.listdir(basepath)中找到了NoneType。请确保目录正确,并在控制台中尝试使用任何目录。只是为了让你能看到输出。好吧,这在我这方面很有效。请注意,在读取文件时,有时它无法分辨文件类型,如果无法读取文本,它将抛出和异常。不幸的是,
os.walk
仍然是最可行的文件夹列表机制,即使在python 3下。我更愿意使用它!但是,有人要求我不要使用os.walk:(我可以确认我使用的是linux:)是的,在linux上工作很好