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

         有这么个需求,那就是在给定目录(例如:/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 






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值