python递归创建目录
来源:互联网 发布:用telnet测试端口 编辑:程序博客网 时间:2024/05/22 08:05
os.mkdir()可以创建指定的目录,但如果其上一级目录不存在,则无法创建成功。
os.makedirs()则可以实现递归创建目录的功能。
下面的代码实现了os.makedirs()类似的功能,——事实上在实现这个功能的时候,还不清楚有makedirs()这个库函数,所以多看看书,扩大知识面非常有必要,避免闭门造车,做无用功。
def mkdir_recursively(path): ''' Create the path recursively, same as os.makedirs(). Return True if success, or return False. e.g. mkdir_recursively('d:\\a\\b\\c') will create the d:\\a, d:\\a\\b, and d:\\a\\b\\c if these paths does not exist. ''' #First transform '\\' to '/' local_path = path.replace('\\', '/') path_list = local_path.split('/') print path_list if path_list is None: return False # For windows, we should add the '\\' at the end of disk name. e.g. C: -> C:\\ disk_name = path_list[0] if disk_name[-1] == ':': path_list[0] = path_list[0] + '\\' dir = '' for path_item in path_list: dir = os.path.join(dir, path_item) print "dir:", dir if os.path.exists(dir): if os.path.isdir(dir): print "mkdir skipped: %s, already exist." % (dir,) else: # Maybe a regular file, symlink, etc. print "Invalid directory already exist:", dir return False else: try: os.mkdir(dir) except Exception, e: print "mkdir error: ", dir print e return False print "mkdir ok:", dir return True
示例:
>>> import os>>> dir = "d:\\x\\y\\z">>> os.mkdir(dir)Traceback (most recent call last): File "<stdin>", line 1, in <module>WindowsError: [Error 3] : 'd:\\x\\y\\z'>>> import file_utilities>>> file_utilities.mkdir_recursively(dir)['d:', 'x', 'y', 'z']dir: d:\mkdir skipped: d:\, already exist.dir: d:\xmkdir ok: d:\xdir: d:\x\ymkdir ok: d:\x\ydir: d:\x\y\zmkdir ok: d:\x\y\zTrue>>> os.makedirs("d:\\xx\\yy\\zz")>>>
下面是Python 2.7中os.py的实现代码:
def makedirs(name, mode=0777): """makedirs(path [, mode=0777]) Super-mkdir; create a leaf directory and all intermediate ones. Works like mkdir, except that any intermediate path segment (not just the rightmost) will be created if it does not exist. This is recursive. """ head, tail = path.split(name) if not tail: head, tail = path.split(head) if head and tail and not path.exists(head): try: makedirs(head, mode) except OSError, e: # be happy if someone already created the path if e.errno != errno.EEXIST: raise if tail == curdir: # xxx/newdir/. exists if xxx/newdir exists return mkdir(name, mode)
通过对比,发现一个新的方法:os.path.split(),专门用来对文件的路径进行分割。从而避免调用string.split(),且区分/和\。再者,os.makedirs()通过递归调用来创建目录,对路径的构造更加灵活,且直接从后往前判断路径是否存在,效率会高一些。
os.path.split()的用法示例:
>>> import os>>> dir = "d:\\xxx\\\yyy\\\zzz">>> head,tail=os.path.split(dir)>>> head'd:\\xxx\\\\yyy'>>> tail'zzz'>>>
0 0
- Python创建递归目录
- python 递归创建目录
- python递归创建目录
- python中的目录递归的创建和目录及其下的文件递归的删除
- 递归创建多级目录
- 递归创建目录
- 递归创建目录
- mkdir递归创建目录
- 递归创建文件目录
- 递归创建目录
- 递归创建目录
- C++ 递归创建目录
- 递归创建多级目录
- php 递归创建目录
- php 递归创建目录
- 递归创建目录
- 递归创建目录
- 递归创建目录
- Ubuntu中查找与Launcher图标所对应的命令
- loadrunner启动web tour-Could not open port 1080-Port is already used by another server
- JavaScript中的this(你不知道的JavaScript)
- fork()子进程与父进程之间的文件描述符问题 www.educity.cn/linux/1241859.html
- 扩展Euclidean算法及其应用(乘法逆元,模线性方程)
- python递归创建目录
- 【数论】hdu4910Problem about GCD
- 极客班GeekBand - C++第一次课程辅导 - 李建忠
- Android 解决mac无法识别手机设备
- UVa 294 - Divisors(唯一分解)
- c++实现哈希表
- 关于C和C++中的基本数据类型int、long、long long、float、double、char、string的大小及表示范围
- 关于Java与c++隐藏、重写不同实现机制的探讨
- tabhost选项卡,做微信以及微博UI界面必学