python - 一个结构化显示文件的脚本,迭代是否有问题?

查看:89
本文介绍了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)

解决方案

關鍵的問題出在, 路徑不對, 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

这篇关于python - 一个结构化显示文件的脚本,迭代是否有问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆