python 生成目录树

正在学习Python,实现了一个生成目录树的功能,练手小程序。可能代码写的不够好,会继续努力的,哪里写的不好的话,希望大家提出宝贵意见,共同学习。源码以及结果分享给大家

# -*-encoding: utf-8 -*-
"""
@version: 3.6
@time: 2018/3/7 9:12
@author: SunnyYang
@title:
@file: travelDir.py
"""
import os
def traveDir(dirname,parentPath,level):
    #遍历目录:dirname 当前访问的目录,parentPath是dirname的父目录,level目录层级
    global dirDs,levels    #目录用对象表示
    parentPath = os.path.join(parentPath,dirname)   #  路径拼接是由 \ 连接
    print(parentPath,'uuuuuuuuuuuu')       #E:\课件\英语\unit one
    levels.setdefault(dirname,level)
    listOfDir = os.listdir(parentPath)  # 用于返回指定的文件夹包含的文件或文件夹的名字列表
    temp = {}
    temp.setdefault(dirname,listOfDir) #
    objsOfDir.append(temp)
    print(''.join(['(Root)' if not level else ' '*6+' '*5*(level-1)+'|---',dirname])) #-1是为了让有子文件夹的目录也跟同一级对齐
    if dirname == Root:
        dirDs.setdefault(dirname,listOfDir)
    else:
        strDirDS = repr(dirDs)
        strListOfDir = repr(listOfDir)
       # strDirDS,strListOfDir = repr(dirDs),repr(listOfDir)
        dirValue = '{"'+dirname+'":'+strListOfDir +'}'
        strDirDS = strDirDS.replace("'"+dirname+"'",dirValue) # 替换,还可设置替换次数
        dirDs = eval(strDirDS)
    for file in listOfDir:
        if os.path.isfile(os.path.join(parentPath,file)):
            levels.setdefault(file,level+1)
            print(' '*6+' '*5*level+'|---'+file)  #循环遍历输出文件夹中的文件,否则只输出文件夹的名称
    listOfSubDirs = [x for x in listOfDir if os.path.isdir(os.path.join(parentPath,x))]
    if not listOfSubDirs:
        level-=1
        parentPath = os.path.split(parentPath)
        return
    for item in listOfSubDirs:
        traveDir(item,parentPath,level+1)
#main function
travelPath = 'E:\课件\英语'  #要遍历的目录路径
parentPath,Root = os.path.split(travelPath)
print(parentPath,'pppppppp')
print(Root,'RRRRRRRRRR')
level = 0
levels = {}
dirDs = {}
objsOfDir = []
print('遍历目录:',travelPath)
traveDir(Root,parentPath,level)
print('生成 目录数据结构dirDS=',dirDs)

生成 目录数据结构dirDS= {'英语': ['sentence.pptx', 'speech-Smile-and-the-world-smiles-with-you.ppt', {'unit one': ['2017 Introduction(1).ppt', '2017 Introduction.ppt']}, {'unit two': ['57793.mp3', '57798.mp3', '57801.mp3', {'sdf': [{'qw': ['新建文本文档.txt']}]}]}]}

树形结果:


windows 的命令行中实现结果:注意参数


python中字典的setdefault()函数与get()函数作用相似;

   1. 如果字典中存在该name对应的value 则直接输出value值,否则直接将该键值对加入字典中。

  

2.global 全局变量

参考文章:http://blog.csdn.net/mldxs/article/details/8559973

3.repr()函数和str()函数的相似,都是返回一个对象的字符串表示,感觉可以这样简单的理解:repr()供解释器读取,str()供人阅读

x = 123
print(repr(x))  #'123'

4.Python中的split()函数和os.path.split()函数区别:

    

1、split()函数
语法:str.split(str=" ",num=string.count(str))[n]

参数说明:
str: 表示为分隔符,默认为空格,但是不能为空串。若字符串中没有分隔符,则把整个字符串作为列表的一个元素。
num:表示分割次数。如果存在参数num,则仅分隔成 num+1 个子字符串。
[n]: 表示选取第n个分片(从0计数

str1 = 'wangwangwang'
print(str1.split()) #['wangwangwang']
print(str1.split('w')) #['', 'ang', 'ang', 'ang']
str2 = 'love   python'  #中间是三个空格
print(str2.split()) #['love', 'python']
print(str2.split(' ')) # ['love', '', '', 'python']
str3 = 'www.bjtu.edu.cn'
print(str3.split('.',0)) #按 . 分割 0 次 ['www.bjtu.edu.cn']
print(str3.split('.',1)) #分割一次  ['www', 'bjtu.edu.cn']
print(str3.split('.',2)[1]) #分割两次,取出索引为1的元素 bjtu
print(str3.split('.',-1))  #尽可能多的分割,-1写与不写没有区别  ['www', 'bjtu', 'edu', 'cn']
s1,s2=str3.split('.',1)
print(s1,s2)  #www  bitu.edu.cn
str4='''first
python
hello'''
print(str4)  # 输出的三个单词各占一行
print(str4.split('\n')) # ['first', 'python', 'hello']
str5='''first
python
hello
'''
print(str4.split('\n')) # ['first', 'python', 'hello', '']

2、os.path.split()函数
语法:os.path.split('PATH')

参数说明:

  1. PATH指一个文件的全路径作为参数:
  2. 如果给出的是一个目录和文件名,则输出路径和文件名
  3. 如果给出的是一个目录名,则输出路径和为空文件名


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值