有这么个需求,那就是在给定目录(例如:/dirA)下的所有子目录的根目录下创建相同的一个文件,有多层目录嵌套的情况,那么需要解决这个问题就需要通过递归的方式来解决。
为了复现这个问题,首先需要递归的创建空目录,那么我们就创建宽度为三,深度为三的目录。
mkdir_recursive函数:
def mkdir_recursive(path,width,depth):
if depth == 0:
return
for inc in range(width):
dirname = 'D'+str(depth)+'W'+str(inc)
os.system('mkdir -p ' + path + os.sep + dirname)
path_temp = os.sep.join([path,dirname])
mkdir_recursive(path_temp,width,depth-1)
函数的原型就是通过for循环遍历每一个目录(在这里是创建每一个目录),在每一个目录下再递归创建,递归函数的出口在于深度的依次递减。
递归添加文件函数traverse_root_dir_add:
def traverse_root_dir_add(path):
dirs = os.listdir(path)
if dirs == [] or len(dirs) == 0:
cmd = 'touch ' + path + os.sep + 'abcd'
print cmd
os.system(cmd)
return
for file in dirs:
path_temp = os.sep.join([path,file])
if os.path.isdir(path_temp):
traverse_root_dir_add(path_temp)
函数的原型为列出当前目录path下的所有目录,如果是根目录(即没有子目录),那么创建文件,且返回;如果不是那么递归调用所有目录。
递归删除文件函数traverse_root_dir_remove:
def traverse_root_dir_remove(path):
dirs = os.listdir(path)
if dirs==[] or len(dirs)==0:
return
for file in dirs:
path_temp = os.sep.join([path,file])
if os.path.isdir(path_temp):
traverse_root_dir_remove(path_temp)
else:
cmd = 'rm -rf ' + path_temp
print cmd
os.system(cmd)
对于删除文件,要做的判断就是判断根目录下是文件的情况下将其删除。
Python获取当前文件绝对路径的方式是:
dirname = os.path.dirname(os.path.realpath(__file__))
dirname1 = os.path.realpath(os.path.dirname(__file__))
那么整体代码是:
#!/usr/bin/env python
import sys
import os
default_path = os.path.realpath( os.path.dirname(__file__) )
def traverse_root_dir_remove(path):
dirs = os.listdir(path)
if dirs==[] or len(dirs)==0:
return
for file in dirs:
path_temp = os.sep.join([path,file])
if os.path.isdir(path_temp):
traverse_root_dir_remove(path_temp)
else:
cmd = 'rm -rf ' + path_temp
print cmd
os.system(cmd)
def traverse_root_dir_add(path):
dirs = os.listdir(path)
if dirs == [] or len(dirs) == 0:
cmd = 'touch ' + path + os.sep + 'abcd'
print cmd
os.system(cmd)
return
for file in dirs:
path_temp = os.sep.join([path,file])
if os.path.isdir(path_temp):
traverse_root_dir_add(path_temp)
def mkdir_recursive(path,width,depth):
if depth == 0:
return
for inc in range(width):
dirname = 'D'+str(depth)+'W'+str(inc)
os.system('mkdir -p ' + path + os.sep + dirname)
path_temp = os.sep.join([path,dirname])
mkdir_recursive(path_temp,width,depth-1)
if __name__ == "__main__":
if len(sys.argv) == 1:
path = default_path
elif len(sys.argv) == 2:
path = sys.argv[1]
else:
exit(-1)
mkdir_recursive(path,3,3)
traverse_root_dir_add(path)
traverse_root_dir_remove(path)
Author:忆之独秀
Email:leaguenew@qq.com
注明出处:http://blog.csdn.net/lavorange/article/details/50409469