我怎样才能recursion创build目录?

有一个Python方法recursion创build目录? 我有这条路:

/home/dail/ 

我想创build

 /home/dail/first/second/third 

我可以recursion地做它,或者我必须创build一个目录之后?

同样的事情:

chmodchown可以recursion执行,而不必为每个文件/目录分配权限?

os.makedirs是你所需要的。 对于chmodchown你将不得不使用os.walk ,并在每个文件/目录中使用它自己。

非常古老的问题,我知道。

从Python 3.2开始,你可以这样做:

 import os path = '/home/dail/first/second/third' os.makedirs(path, exist_ok=True) 

由于exist_ok标志这甚至不会抱怨,如果目录存在(取决于您的需要….)。

并从Python 3.4(其中包括pathlib模块 )开始,你可以这样做:

 from pathlib import Path path = Path('/home/dail/first/second/third') path.mkdir(parents=True) 

从python 3.5 mkdir也有一个exist_ok标志 – 将其设置为True将不会引发exception,如果该目录存在:

 path.mkdir(parents=True, exist_ok=True) 

以下是我的实现供您参考:

 def _mkdir_recursive(self, path): sub_path = os.path.dirname(path) if not os.path.exists(sub_path): self._mkdir_recursive(sub_path) if not os.path.exists(path): os.mkdir(path) 

希望这个帮助!

我同意Cat Plus Plus的回答。 但是,如果您知道这将只用于类Unix操作系统,则可以使用外部调用shell命令mkdirchmodchown ,您可以在其中添加额外的标志以recursion地影响目录:

 >>> import subprocess >>> subprocess.check_output(['mkdir', '-p', 'first/second/third']) # Equivalent to running "mkdir -p first/second/third" from the shell which will # create first/second/third making parent (-p) directories if they don't exist. >>> subprocess.check_output(['chown', '-R', 'dail:users', 'first']) # change owner to dail, and group to users group for first and all subdirectories. (-R for recursive) >>> subprocess.check_output(['chmod', '-R', 'g+w', 'first']) # add group write permissions to first and all subdirectories. 

编辑:我最初使用的命令是一个不好的select,因为它的弃用和易受注入攻击。 (例如,如果用户input了创build名为first/;rm -rf --no-preserve-root /;可能会删除所有目录)。

编辑2:如果您使用的Python不到2.7使用check_call而不是check_output 。 请参阅http://docs.python.org/library/subprocess.html#convenience-functions

尝试使用os.makedirs :

 import os try: os.makedirs(<path>) except OSError: pass