如何在创建目录时显示消息?

How to display messages while creating directories?

我正在寻找输入以在创建目录时打印消息。我处于混合 os 环境中,但在我的情况下使用 Win 7、python 2.7、ArcGIS 10.2。

就功能而言,下面的代码工作正常,如果目录确实存在,消息会出现在屏幕上,但是当 os.makedirs 实际上正在创建不存在的目录时,我无法将消息返回到屏幕目录,我希望代码能够做到这一点。

我已经使用了 Google 和 Whosebug,并且出现了 os 很多很多处理 os.makdir 的例子,但是没有找到任何解决我的问题的方法与 Check if Dir Exists

相同
    td = arcpy.env.workspace

    dn1 = "Test" dirmk = td +sep+ dn1

    try:
        os.makedirs(dirmk) except OSError:
        if os.path.exists(dirmk):
            print '\n' + dn1 + " dir already exists so keep on hustlin"
        else:
            print '\n' + "Creating " + dn1

稍微重新排列您的代码,使其显示为:

if not os.path.exists(dirmk):
    print "Creating: {}".format(dirmk)
    os.makedirs(dirmk)
else:
    print "{} already exists; skipping".format(dirmk)

您已经在尝试使用 os.path.exists() 所以请在一定条件下使用它。

If path does not exists; create it and print a message; otherwise skip.

另一种方法是使用 try/except/else

更新: 当然我可以理解为什么你可能想在这里使用 try/except/else 但 IHMO 你正在调用 os.makedirs() 不管路径是否存在与否。所以我会这样做作为对 catch 和 OSError(s):

的改进
if not os.path.exists(dirmk):
    print "Creating: {}".format(dirmk)
    try:
        os.makedirs(dirmk)
    except:
        print "Failed to create {}".format(dirmk)
else:
    print "{} already exists; skipping".format(dirmk)

如果这是作为可重用函数编写的,您可以将其短路为:

def create_if_not_exists(dirmk):
    if os.path.exists(dirmk):
        print "{} already exists; skipping".format(dirmk)  
        return

    print "Creating: {}".format(dirmk)

    try:
        os.makedirs(dirmk)
    except:
        print "Failed to create {}".format(dirmk)

您的 else 子句看起来不合适。在您发布的代码中,仅当 OSError 发生并且 dirmk 不存在时才会打印 "Creating" 消息。

在下面的代码片段中,如果在创建 dirmk 时没有遇到错误,则会打印 "Created" 消息。

td = arcpy.env.workspace

dn1 = "Test"
dirmk = td + sep + dn1

try:
    os.makedirs(dirmk)
except OSError:
    if os.path.exists(dirmk):
        print '\n' + dn1 + " dir already exists so keep on hustlin"
else:
    print '\n' + "Created " + dn1

这是满足您的用例的对现有代码的最小更改。但是您可以通过执行与另一个答案中的建议类似的操作来使其更加简洁和 Pythonic:

你很接近,但还不够。在您的 try 块中,您进入 except 的唯一时间是如果有一个 OSError...就像文件已经存在一样。所以您永远不会看到 Creating... 消息。

这应该会更好:

import os  # In your original, you weren't importing this.

td = arcpy.env.workspace

dn1 = "Test"
dirmk = td + sep + dn1

try:
    os.makedirs(dirmk)

except OSError, e:
    if e.errno == 17:  # Error code for file exists
        print '\n' + dn1 + " dir already exists so keep on hustlin"
    else:
        print "OSError %s" % e

else:
    print '\n' + "'" + dn1 + "' created!"