您的位置:首页 > 编程语言 > Python开发

使用Python递归在根目录下面写入文件

2015-12-26 18:28 711 查看
         有这么个需求,那就是在给定目录(例如:/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 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python