python递归列举所有文件
秋酷 • 2018 年 01 月 18 日
使用递归列举特定目录下的全部文件
老习惯上代码#!usr/bin/python
#-*- coding:utf-8 -*-
__author__='ddc'
import os
path="/Users/ddc/Desktop/B10003012fj" #定义路径
global dir_num
dir_num=0 #递归函数执行次数
def Listdir(path,fullname=False):
#dir_num=0 #文件夹的数量
global dir_num
dir_num+=1
a=' '*dir_num
if not fullname:
if os.listdir(path):
for f_d in os.listdir(path):
p_con=os.path.join(path,f_d)
if os.path.isfile(p_con):
print(a+f_d) #打印文件名
else:
if os.path.isdir(p_con):
print(' '*(dir_num-1)+'----'+f_d) #打印文件夹名
Listdir(p_con) #递归打印文件夹下所有文件
dir_num-=1 #保持下次的格式能够与之前的文件夹位置相同
else:
print(a+'空')
else:
if os.listdir(path):
for f_d in os.listdir(path):
p_con=os.path.join(path,f_d)
if os.path.isfile(p_con):
print(a+p_con)
else:
if os.path.isdir(p_con):
print(' '*(dir_num-1)+'----'+p_con)
Listdir(p_con,fullname=True)
dir_num-=1
else:
print(a+'空')
Listdir(path,fullname=False)
解释
这次代码知识定义一个函数,函数参数有:需要列举的文件目录,以及一个是否以绝对地址的方式显示即布尔变量fullname。
首先定义一个全局变量 dir_num,这样函数在调用本身的时候这个值也会产生变化。即dir_num+=1
文件和文件夹要区分开
这时候需要使用一个判断语句,来判断内容是文件还是文件夹,如果是文件夹则需要继续进入其中回调本函数,如果是文件则直接打印即可
打印的格式定义了一个变量a来排版打印的格式,a的空格数和文件的深度(即层数)成正比,文件夹藏的越深