python - 一个结构化显示文件的脚本,迭代是否有问题?
阿神
阿神 2017-04-18 09:12:57
[Python讨论组]

最近在学python,写了一个小脚本,基本功能就是遍历显示指定路径下的所有文件夹、文件,根据层级在显示内容前面加"--"。
但是不管怎么样,输出只有第一层的所有文件和文件夹,仔细的审查了好几遍代码,就是找不出原因在哪,求大神告知问题所在,以下是代码内容:

import os

rootpath = input("请输入目录:")
catedir = os.listdir(rootpath)


def prt_dir_files(catedir, is_indent=True, level=0):
    print(rootpath)
    for each_item in catedir:
        if os.path.isdir(each_item):
            print(each_item)
            prt_dir_files(os.listdir(each_item), is_indent, level+1)
        else:
            if is_indent:
                print("--" * level, end="")
            print(each_item)

prt_dir_files(catedir)
阿神
阿神

闭关修行中......

全部回复(3)
大家讲道理

關鍵的問題出在, 路徑不對, listdir 拿到的只是目錄底下的 文件名, 而不是 文件的路徑

所以必須要使用 os.path.join 來製造出完整的路徑。

根據以上說明我改了一下你的代碼:

import os

def prt_dir(path, indent_symbol='', level=0):
    print(indent_symbol*level, os.path.basename(path))

    if os.path.isdir(path):
        for f in os.listdir(path): 
            fpath = os.path.join(path, f)
            prt_dir(fpath, indent_symbol, level+1)

if __name__ == '__main__':
    rootpath = input("请输入目录:")
    prt_dir(rootpath, '--', 0)

使用 os.walk 也是個不錯的主意, 以下範例:

import os

def prt_dir(rootpath, symbol=''):
    for root, dirs, files in os.walk(rootpath):
        path = root.split('/')
        print((len(path) - 1) * symbol, os.path.basename(root))
        for file in files:
            print(len(path) * symbol, file)


if __name__ == '__main__':
    rootpath = input("请输入目录:")
    prt_dir(rootpath, '--')

我回答過的問題: Python-QA

PHP中文网

os.path.isdir(each_item):
这个函数用法有问题

怪我咯
import os

def prt_dir_files(rootpath, is_indent=True, level=0):
    print(rootpath)
    catedir = os.listdir(rootpath)
    for each_item in catedir:
        if os.path.isdir(rootpath+"/"+each_item):
            print(each_item)
            prt_dir_files(rootpath+"/"+each_item, is_indent, level+1)
        else:
            if is_indent:
                print("--" * level, end="")
            print(each_item)

rootpath = input("请输入目录:")
prt_dir_files(rootpath)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号