【问题标题】:What is different between makedirs and mkdir of os?os的makedirs和mkdir有什么区别?
【发布时间】:2012-11-28 23:03:57
【问题描述】:

我很困惑使用这两个os方法来创建新目录。

请给我一些 Python 的例子。

【问题讨论】:

  • documentation for os.makedirs() 解释了差异。你读了吗?

标签: python linux python-2.7


【解决方案1】:

makedirs()creates all the intermediate directories 如果它们不存在(就像 bash 中的 mkdir -p)。

mkdir() 可以创建单个子目录,如果指定了不存在的中间目录会抛出异常。

两者都可用于创建单个“叶”目录 (dirA):

  • os.mkdir('dirA')
  • os.makedirs('dirA')

但必须使用 makedirs 来创建“分支”:

  • os.makedirs('dirA/dirB') 将起作用[整个结构已创建]

mkdir 可以在这里工作 如果 dirA 已经存在,但如果不存在则会抛出错误。

请注意,与 bash 中的 mkdir -p 不同,如果叶子已经存在,则两者都会失败。

【讨论】:

  • 这个答案需要编辑因为os.makedirs()会在目录已经存在时抛出异常,所以它不像mkdir -p
  • os.makedirs(new_path, exists_ok=True) 不会抛出异常
【解决方案2】:

(不能评论,只是添加到NPE的答案中。)

在 Python3 中,os.makedirs 有一个默认参数 exist_ok=False
如果您将其设置为 True,那么如果叶子存在,os.makedirs不会抛出任何异常。
(而os.mkdir 没有这个参数。)

就像这样:

os.makedirs('dirA', exist_ok=True)

附言
您可以在 IPython shell 中的方法名称前键入 ? 以快速查看文档。
例如:

>>> import os
>>> ? os.makedirs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 2015-11-28
    • 2012-03-24
    • 2013-04-26
    • 2010-12-29
    • 2014-12-12
    相关资源
    最近更新 更多