mkdir和makedirs的使用总结


                                                                      昨晚写的水源3P图片自动下载的脚本遇到一个小的问题,就是当我用makedirs创建递归子目录的时候,总是检测到一个OSError,但是又不影响结果,百思不得其解。
      今天早上起来有研究了Python的lib文档,发现只有在子目录创建失败或者已经存在的时候makedirs才会抛出一个OSError异常,所以问题肯定出在创建已经存在的目录上。看了一下程序结构,果不其然,我为每一个主题帖子创建一个存档的目录是在下载每一张图片时执行的,这样导致每个主题帖的第1张以后的图片下载时都会去创建同一个子目录,所以这样就抛出了一个OSError异常。把这段程序移到每个主题帖的循环中。问题得以解决,并且这样还提高了效率。
      另外,在执行URL访问时我先建立了"download"目录,这样,不必每次循环都去判断"download"目录是否存在,而且可以直接用mkdir来创建子目录(因为上级目录已经存在),这样也可以改善效率。
   
      总结一下mkdir和makedirs的用法:
      1.mkdir( path [,mode] )
      作用:创建一个目录,可以是相对或者绝对路径,mode的默认模式是0777。
      如果目录有多级,则创建最后一级。如果最后一级目录的上级目录有不存在的,则会抛出一个OSError,例如: import os
os.mkdir( './image' ) # successful
# if ./download exits, successful
# else
failed, get a
oserror
try :
    os.mkdir( 'download/image' )
except OSError, why :
    print "Faild: %s " % str(why)
   
      2.makedirs( path [,mode] )
      作用: 创建递归的目录树,可以是相对或者绝对路径,mode的默认模式也是0777。
      如果子目录创建失败或者已经存在,会抛出一个OSError的异常,Windows上Error 183即为目录已经存在的异常错误。如果path只有一级,与mkdir一样。例如:
import os
try :
    os.mkdir( 'download/image/png' )
except OSError, why :
    print "Faild: %s " % str(why)