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

时间:2015-05-12 01:05:26

标签: python python-2.7 arcgis arcpy os.path

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

以下代码在功能方面运行良好,如果目录确实存在,屏幕上会显示消息但是当os.makedirs实际创建不存在的目录时,我无法将消息返回到屏幕,我会喜欢这样做的代码。

我使用过谷歌和Stackoverflow,遇到了许多处理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

3 个答案:

答案 0 :(得分:6)

您的else条款看起来不合适。在您发布的代码中,"创建"只有在OSError发生且dirmk不存在时才会打印消息。

在下面的代码段中,"创建"如果在创建dirmk时未遇到任何错误,则会打印消息。

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:https://stackoverflow.com/a/30180115/460282

答案 1 :(得分:3)

你很亲密,但并不完全。在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!"

答案 2 :(得分:2)

重新排列代码,使其显示为:

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

您已尝试使用os.path.exists(),因此请在条件中使用它。

  

如果路径不存在;创建它并打印一条消息;除此以外   跳过。

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

更新:当然,我可以看到为什么你可能想在这里使用try/except/else但是你正在调用os.makedirs()的IHMO,无论路径是否存在。所以我会这样做,作为一个改进来捕捉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)