显示指定路径的目录文件树

参考了一下其他大佬的,自己又完善了一点。
显示指定路径的目录文件树。

import os
from os.path import join, getsize
import re

def tryint(s):                       #将元素中的数字转换为int后再排序
    try:
        return int(s)
    except ValueError:
        return s

def str2int(v_str):                #将元素中的字符串和数字分割开
    return [tryint(sub_str) for sub_str in re.split('([0-9]+)', v_str)]

def sort_humanly(v_list):    #以分割后的list为单位进行排序   人为排序
    return sorted(v_list, key=str2int)  #第一个参数是列表,第二个参数是函数(按照什么来排序)



def getdirsize(dir):
    size = 0
    for root, dirs, files in os.walk(dir): #root路径、dirs文件夹目录列表、files文件目录列表
        size += sum([getsize(join(root, name)) for name in files])
    return size


def traverse_dir(current_dir, deep=0):
    """
    current_dir: 绝对路径: "./"  或当前路径: 'D:/picture'
    """
    dir_list = os.listdir(current_dir)
    # traverse folder first.
    path_list, file_list = [], []
    for dir in dir_list:
        path = os.path.join(current_dir, dir) #拼接
        if os.path.isdir(path): #判断  如果是文件夹的话
            path_list.append(dir)
        else:#如果是文件,添加到文件列表
            file_list.append(dir)
    path_list=sort_humanly(path_list)
    dir_list = file_list + path_list


    # traverse all dir.
    for dir in dir_list: #遍历
        path = os.path.join(current_dir, dir)
        if os.path.isdir(path):  #如果是文件夹的话
            # do something to this directory
            if getdirsize(path)/1024/1024/1024>=1 :  #GB
                print("\t" * deep, dir,"\t",round(getdirsize(path)/1024/1024/1024,2),"GB")
            if getdirsize(path)/1024/1024>=1 and getdirsize(path)/1024/1024/1024<1 :  #MB
                print("\t" * deep, dir,"\t",round(getdirsize(path)/1024/1024,2),"MB")
            if getdirsize(path)/1024>=1 and getdirsize(path)/1024/1024<1 :  #KB
                print("\t" * deep, dir,"\t",round(getdirsize(path)/1024,2),"KB")
            if getdirsize(path) / 1024 < 1:  #B
                print("\t" * deep, dir, "\t", round(getdirsize(path), 2), "B")
            traverse_dir(path, deep + 1) #递归

        if os.path.isfile(path):  #如果是文件的话
            # do something to this file
            if getsize(path)/1024/1024/1024>=1:  #GB
               print("\t" * deep, "|--", dir,"\t",round(getsize(path)/1024/1024/1024,2),"GB")#列出具体文件
            if getsize(path)/1024/1024>=1 and getsize(path)/1024/1024/1024<1:  #MB
               print("\t" * deep, "|--", dir,"\t",round(getsize(path)/1024/1024,2),"MB")#列出具体文件
            if getsize(path)/1024>=1 and getsize(path)/1024/1024<1:  #GB
               print("\t" * deep, "|--", dir,"\t",round(getsize(path)/1024,2),"KB")#列出具体文件
            if getsize(path)/1024<1:  #B
               print("\t" * deep, "|--", dir,"\t",round(getsize(path),2),"B")#列出具体文件




path=str(input("请输入指定路径: "))
traverse_dir(path)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值