是否有Python方法递归创建目录?我有这样的路径:
/home/dail/
我想要创造
/home/dail/first/second/third
我能递归地做吗,还是必须一个接一个地创建一个目录?
同样的道理:
chmod和chown我可以递归地做,没有为每个文件/dir分配权限吗?
是否有Python方法递归创建目录?我有这样的路径:
/home/dail/
我想要创造
/home/dail/first/second/third
我能递归地做吗,还是必须一个接一个地创建一个目录?
同样的道理:
chmod和chown我可以递归地做,没有为每个文件/dir分配权限吗?
当前回答
尝试使用os.makedirs:
import os
import errno
try:
os.makedirs(<path>)
except OSError as e:
if errno.EEXIST != e.errno:
raise
其他回答
以下是我的实现,供大家参考:
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。确保传递额外的标志递归地影响目录:
>>> import subprocess
>>> subprocess.check_output(['mkdir', '-p', 'first/second/third'])
# Equivalent to running 'mkdir -p first/second/third' in a shell (which creates
# parent directories if they do not yet exist).
>>> subprocess.check_output(['chown', '-R', 'dail:users', 'first'])
# Recursively change owner to 'dail' and group to 'users' for 'first' and all of
# its subdirectories.
>>> subprocess.check_output(['chmod', '-R', 'g+w', 'first'])
# Add group write permissions to 'first' and all of its subdirectories.
EDIT我最初使用命令,这是一个糟糕的选择,因为它已弃用并且容易受到注入攻击。(例如,如果用户输入创建一个名为first/;rm -rf——no-preserve-root /;的目录,则可能删除所有目录)。
如果你使用的Python版本低于2.7,请使用check_call代替check_output。有关详细信息,请参阅子流程文档。
尝试使用os.makedirs:
import os
import errno
try:
os.makedirs(<path>)
except OSError as e:
if errno.EEXIST != e.errno:
raise
从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将不会引发异常:
path.mkdir(parents=True, exist_ok=True)
操作系统。Makedirs正是你所需要的。对于chmod或chown,你必须使用os。自己在每个文件/目录上使用它。