我怎样才能recursion创build目录?
有一个Python方法recursion创build目录? 我有这条路:
/home/dail/
我想创build
/home/dail/first/second/third
我可以recursion地做它,或者我必须创build一个目录之后?
同样的事情:
chmod和chown可以recursion执行,而不必为每个文件/目录分配权限?
os.makedirs
是你所需要的。 对于chmod
或chown
你将不得不使用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命令mkdir
, chmod
和chown
,您可以在其中添加额外的标志以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