使用Python递归在根目录下面写入文件
2015-12-26 18:28
711 查看
有这么个需求,那就是在给定目录(例如:/dirA)下的所有子目录的根目录下创建相同的一个文件,有多层目录嵌套的情况,那么需要解决这个问题就需要通过递归的方式来解决。
为了复现这个问题,首先需要递归的创建空目录,那么我们就创建宽度为三,深度为三的目录。
mkdir_recursive函数:
函数的原型就是通过for循环遍历每一个目录(在这里是创建每一个目录),在每一个目录下再递归创建,递归函数的出口在于深度的依次递减。
递归添加文件函数traverse_root_dir_add:
递归删除文件函数traverse_root_dir_remove:
Python获取当前文件绝对路径的方式是:
那么整体代码是:
Author:忆之独秀
Email:leaguenew@qq.com
注明出处:http://blog.csdn.net/lavorange/article/details/50409469
为了复现这个问题,首先需要递归的创建空目录,那么我们就创建宽度为三,深度为三的目录。
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动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法