在没有os.walk的情况下以递归方式遍历python中的目录结构

时间:2017-01-16 13:13:25

标签: 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:
            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'

问题是它不会比一个目录更进一步。我还想能够直观地指出什么是目录,什么是文件

4 个答案:

答案 0 :(得分:3)

试试这个:

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。 改编自: http://codegists.com/snippet/python/print_directory_contentspy_skobnikoff_python

答案 1 :(得分:2)

使用递归尝试此操作 这很简单,而且代码更少

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)

答案 2 :(得分:1)

尝试使用递归函数

curl -XDELETE 'localhost:9200/my_index '
curl -XPUT 'localhost:9200/my_index ' -d '
{ 
 "settings": { "number_of_shards": 1 }
}'
curl -XPOST 'localhost:9200/my_index/my_type/_bulk' -d'
{ "index": { "_id": 1 }}
{ "title": "The quick brown fox" }
{ "index": { "_id": 2 }}
{ "title": "The quick brown fox jumps over the lazy dog" }
{ "index": { "_id": 3 }}
{ "title": "The quick brown fox jumps over the quick dog" }
{ "index": { "_id": 4 }}
{ "title": "Brown fox brown dog" }'

curl -XGET 'localhost:9200/my_index/my_type/_search' -d'
{
    "query": {
        "match": {
            "title": "QUICK!"
        }
    }
}'

抱歉,如果这不符合你的例子,但我很难理解你的目的。

答案 3 :(得分:0)

此问题与Print out the whole directory tree重复。

TL; TR:使用os.listdir