Python操作目录-遍历

----

要直接看源码的同学:

目录

源码


----

前几天看见cmd里的一行命令:

tree d:

然后

(节选)

│      │      ├─Windows.System.Profile.ProfileRetailInfoContract
│      │      │  └─1.0.0.0
│      │      │      ├─de
│      │      │      ├─en
│      │      │      ├─es
│      │      │      ├─fr
│      │      │      ├─it
│      │      │      ├─jp
│      │      │      ├─ko
│      │      │      ├─ru
│      │      │      ├─zh-hans
│      │      │      └─zh-hant
│      │      ├─Windows.System.Profile.ProfileSharedModeContract
│      │      │  └─2.0.0.0
│      │      │      ├─de
│      │      │      ├─en
│      │      │      ├─es
│      │      │      ├─fr
│      │      │      ├─it
│      │      │      ├─jp
│      │      │      ├─ko
│      │      │      ├─ru
│      │      │      ├─zh-hans
│      │      │      └─zh-hant
│      │      ├─Windows.System.Profile.SystemManufacturers.SystemManufacturersContract
│      │      │  └─3.0.0.0
│      │      │      ├─de
│      │      │      ├─en
│      │      │      ├─es
│      │      │      ├─fr
│      │      │      ├─it
│      │      │      ├─jp
│      │      │      ├─ko
│      │      │      ├─ru
│      │      │      ├─zh-hans
│      │      │      └─zh-hant
│      │      ├─Windows.System.SystemManagementContract
│      │      │  └─7.0.0.0
│      │      │      ├─de
│      │      │      ├─en
│      │      │      ├─es
│      │      │      ├─fr
│      │      │      ├─it
│      │      │      ├─jp
│      │      │      ├─ko
│      │      │      ├─ru
│      │      │      ├─zh-hans
│      │      │      └─zh-hant
│      │      ├─Windows.System.UserProfile.UserProfileContract
│      │      │  └─2.0.0.0
│      │      │      ├─de
│      │      │      ├─en
│      │      │      ├─es
│      │      │      ├─fr
│      │      │      ├─it
│      │      │      ├─jp
│      │      │      ├─ko
│      │      │      ├─ru
│      │      │      ├─zh-hans
│      │      │      └─zh-hant
│      │      ├─Windows.System.UserProfile.UserProfileLockScreenContract
│      │      │  └─1.0.0.0
│      │      │      ├─de
│      │      │      ├─en
│      │      │      ├─es
│      │      │      ├─fr
│      │      │      ├─it
│      │      │      ├─jp
│      │      │      ├─ko
│      │      │      ├─ru
│      │      │      ├─zh-hans
│      │      │      └─zh-hant
│      │      ├─Windows.UI.ApplicationSettings.ApplicationsSettingsContract
│      │      │  └─1.0.0.0
│      │      │      ├─de
│      │      │      ├─en
│      │      │      ├─es
│      │      │      ├─fr
│      │      │      ├─it
│      │      │      ├─jp
│      │      │      ├─ko
│      │      │      ├─ru
│      │      │      ├─zh-hans
│      │      │      └─zh-hant
│      │      ├─Windows.UI.Core.AnimationMetrics.AnimationMetricsContract
│      │      │  └─1.0.0.0
│      │      │      ├─de
│      │      │      ├─en
│      │      │      ├─es
│      │      │      ├─fr
│      │      │      ├─it
│      │      │      ├─jp
│      │      │      ├─ko
│      │      │      ├─ru
│      │      │      ├─zh-hans
│      │      │      └─zh-hant
│      │      ├─Windows.UI.Core.CoreWindowDialogsContract
│      │      │  └─1.0.0.0
│      │      │      ├─de
│      │      │      ├─en
│      │      │      ├─es
│      │      │      ├─fr
│      │      │      ├─it
│      │      │      ├─jp
│      │      │      ├─ko
│      │      │      ├─ru
│      │      │      ├─zh-hans
│      │      │      └─zh-hant
│      │      ├─Windows.UI.Core.Preview.Communications.PreviewCommunicationsContract
│      │      │  └─1.0.0.0
│      │      ├─Windows.UI.Shell.SecurityAppManagerContract
│      │      │  └─1.0.0.0
│      │      │      ├─de
│      │      │      ├─en
│      │      │      ├─es
│      │      │      ├─fr
│      │      │      ├─it
│      │      │      ├─jp
│      │      │      ├─ko
│      │      │      ├─ru
│      │      │      ├─zh-hans
│      │      │      └─zh-hant
│      │      ├─Windows.UI.UIAutomation.UIAutomationContract
│      │      │  └─2.0.0.0
│      │      │      ├─de
│      │      │      ├─en
│      │      │      ├─es
│      │      │      ├─fr
│      │      │      ├─it
│      │      │      ├─jp
│      │      │      ├─ko
│      │      │      ├─ru
│      │      │      ├─zh-hans
│      │      │      └─zh-hant
│      │      ├─Windows.UI.ViewManagement.ViewManagementViewScalingContract
│      │      │  └─1.0.0.0
│      │      │      ├─de
│      │      │      ├─en
│      │      │      ├─es
│      │      │      ├─fr
│      │      │      ├─it
│      │      │      ├─jp
│      │      │      ├─ko
│      │      │      ├─ru
│      │      │      ├─zh-hans
│      │      │      └─zh-hant
│      │      ├─Windows.UI.WebUI.Core.WebUICommandBarContract
│      │      │  └─1.0.0.0
│      │      │      └─en
│      │      ├─Windows.UI.Xaml.Core.Direct.XamlDirectContract
│      │      │  └─5.0.0.0
│      │      │      ├─de
│      │      │      ├─en
│      │      │      ├─es
│      │      │      ├─fr
│      │      │      ├─it
│      │      │      ├─jp
│      │      │      ├─ko
│      │      │      ├─ru
│      │      │      ├─zh-hans
│      │      │      └─zh-hant
│      │      ├─Windows.UI.Xaml.Hosting.HostingContract
│      │      │  └─5.0.0.0
│      │      │      ├─de
│      │      │      ├─en
│      │      │      ├─es
│      │      │      ├─fr
│      │      │      ├─it
│      │      │      ├─jp
│      │      │      ├─ko
│      │      │      ├─ru
│      │      │      ├─zh-hans
│      │      │      └─zh-hant
│      │      └─Windows.Web.Http.Diagnostics.HttpDiagnosticsContract
│      │          └─2.0.0.0
│      │              ├─de
│      │              ├─en
│      │              ├─es
│      │              ├─fr
│      │              ├─it
│      │              ├─jp
│      │              ├─ko
│      │              ├─ru
│      │              ├─zh-hans
│      │              └─zh-hant
│      ├─Remote
│      │  ├─ARM
│      │  ├─x64
│      │  └─x86
│      ├─Shortcuts
│      ├─Source
│      │  ├─10.0.18362.0
│      │  │  └─ucrt
│      │  │      ├─conio
│      │  │      ├─convert
│      │  │      ├─dll
│      │  │      ├─env
│      │  │      ├─exec
│      │  │      ├─filesystem
│      │  │      ├─heap
│      │  │      ├─inc
│      │  │      │  └─i386
│      │  │      ├─initializers
│      │  │      │  └─i386
│      │  │      ├─internal
│      │  │      ├─locale
│      │  │      ├─lowio
│      │  │      ├─mbstring
│      │  │      ├─misc
│      │  │      ├─startup
│      │  │      ├─stdio
│      │  │      ├─stdlib
│      │  │      ├─string
│      │  │      │  ├─amd64
│      │  │      │  └─i386
│      │  │      └─time
│      │  └─10.0.22000.0
│      │      └─ucrt
│      │          ├─conio
│      │          ├─convert
│      │          ├─dll
│      │          ├─env
│      │          ├─exec
│      │          ├─filesystem
│      │          ├─heap
│      │          ├─inc
│      │          │  └─i386
│      │          ├─initializers
│      │          │  └─i386
│      │          ├─internal
│      │          ├─locale
│      │          ├─lowio
│      │          ├─mbstring
│      │          ├─misc
│      │          ├─startup
│      │          ├─stdio
│      │          ├─stdlib
│      │          ├─string
│      │          │  ├─amd64
│      │          │  ├─arm
│      │          │  ├─arm64
│      │          │  └─i386
│      │          └─time
│      ├─Testing
│      │  └─Runtimes
│      │      └─TAEF
│      │          ├─MinTe
│      │          │  ├─NetFx4.5
│      │          │  ├─netstandard1.1
│      │          │  └─netstandard2.0
│      │          ├─NetFx4.5
│      │          ├─netstandard1.1
│      │          ├─netstandard2.0
│      │          └─x64
│      │              ├─MinTe
│      │              │  ├─NetFx4.5
│      │              │  ├─netstandard1.1
│      │              │  └─netstandard2.0
│      │              ├─NetFx4.5
│      │              ├─netstandard1.1
│      │              └─netstandard2.0
│      └─UnionMetadata
│          ├─10.0.18362.0
│          │  └─Facade
│          └─10.0.22000.0
│              └─Facade
└─新建文件夹

于是我就想用Python做一个。

源码

def tree(path):
    r"""
    列出所有的目录下子目录及文件
    例:
    文件夹plogin,有子文件夹a,a2;子文件夹a有子文件夹b.
    plogin目录下还有文件a.txt.
    运行tree(r"C:\Users\86158\Desktop\plogin")
    输出:
    Tree route:C:\Users\86158\Desktop\plogin
    |-plogin 		---<dir>
    |	|-a.txt 		---<TXT file>
    |	|-a 		---<dir>
    |	|	|-b 		---<dir>
    |	|-a2 		---<dir>
    :param path: 路径
    :return:
    """
    print("Tree route:",path,sep="")
    for a,b,c in os.walk(path,topdown=True):
        nona="."+a.replace(path,"")
        prog=nona.strip(".").split("\\")[-1]
        z=len(nona.strip(".").split("\\"))-1
        if prog=="":prog=a.split("\\")[-1]
        prefix="|\t"*z+"|"

        print(f"{prefix}-{prog} \t\t---<dir>")
        prefix="|"+"\t"+prefix
        for j in c:
            print(prefix+"-",j,
        f" \t\t---<{j.split('.')[-1].upper() if len(j.split('.'))>=2 else 'NONE_TYPE'} file>",sep="")

 --效果--

tree(r"d:")

(节选)

|	|	|	|	|	|	|	|	|	|-msg_34.txt 		---<TXT file>
|	|	|	|	|	|	|	|	|	|-msg_35.txt 		---<TXT file>
|	|	|	|	|	|	|	|	|	|-msg_36.txt 		---<TXT file>
|	|	|	|	|	|	|	|	|	|-msg_37.txt 		---<TXT file>
|	|	|	|	|	|	|	|	|	|-msg_38.txt 		---<TXT file>
|	|	|	|	|	|	|	|	|	|-msg_39.txt 		---<TXT file>
|	|	|	|	|	|	|	|	|	|-msg_40.txt 		---<TXT file>
|	|	|	|	|	|	|	|	|	|-msg_41.txt 		---<TXT file>
|	|	|	|	|	|	|	|	|	|-msg_42.txt 		---<TXT file>
|	|	|	|	|	|	|	|	|	|-msg_43.txt 		---<TXT file>
|	|	|	|	|	|	|	|	|	|-msg_44.txt 		---<TXT file>
|	|	|	|	|	|	|	|	|	|-msg_45.txt 		---<TXT file>
|	|	|	|	|	|	|	|	|	|-msg_46.txt 		---<TXT file>
|	|	|	|	|	|	|	|	|	|-PyBanner048.gif 		---<GIF file>
|	|	|	|	|	|	|-encodings 		---<dir>
|	|	|	|	|	|	|	|-aliases.py 		---<PY file>
|	|	|	|	|	|	|	|-aliases.pyc 		---<PYC file>
|	|	|	|	|	|	|	|-ascii.py 		---<PY file>
|	|	|	|	|	|	|	|-base64_codec.py 		---<PY file>
|	|	|	|	|	|	|	|-big5.py 		---<PY file>
|	|	|	|	|	|	|	|-big5hkscs.py

就     很      好

---------------------

解析一下:

def tree表示创建函数tree。

接下来用os.walk来遍历目录。

然后通过判断路径来判断是否为子目录,目录层级,最后按照层级输出prefix(前缀)+文件。

------------------

接下来改进的2.0版通过分析文件名的获取途径判断了为路径【dir】还是文件【file】

-----------------

max版本则做到通过结尾判断类型,如没有后缀,则为NONE_TYPE文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Unconquerable p

给点吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值