【问题标题】:Workflow to create a folder if it doesn't exist already如果文件夹不存在,则创建文件夹的工作流程
【发布时间】:2015-08-20 16:19:51
【问题描述】:

this interesting threat 中,如果目录不存在,用户会提供一些选项来创建目录。

得票最多的答案显然是最受欢迎的,我猜是因为它是最短的方法:

if not os.path.exists(directory):
    os.makedirs(directory)

第二个答案中包含的功能似乎更强大,在我看来是最好的方法。

import os
import errno

def make_sure_path_exists(path):
    try:
        os.makedirs(path)
    except OSError as exception:
        if exception.errno != errno.EEXIST:
            raise

所以我想知道,人们在他们的脚本中做了什么?键入 2 行只是为了创建一个文件夹?或者更糟糕的是,将函数make_sure_path_exists 复制并粘贴到每个需要创建文件夹的脚本中?

我希望像 Python 这样广泛传播的编程语言已经有一个包含类似函数的库。

我知道的其他两种编程语言,更像是脚本语言,可以轻松做到这一点。

重击:mkdir -p path

Powershell:New-Item -Force path

请不要将此问题视为对 Python 的咆哮,因为它不是这样的。

我正计划学习 Python 来编写脚本,其中 90% 的时间我都必须创建文件夹,我想知道这样做最有效的方法是什么。

我真的认为我缺少关于 Python 的一些东西。

【问题讨论】:

标签: python


【解决方案1】:

你可以使用下面的

# file handler
import os
filename = "./logs/mylog.log"
os.makedirs(os.path.dirname(filename), exist_ok=True)

【讨论】:

  • 答案是正确的,但请确定是否已经存在类似的答案。在这种情况下,关于“exist_ok”的提及已经发布在评论中:stackoverflow.com/questions/32123394/…
  • @KasiaGauza 但是 cmets 不是答案,并且操作员不能接受评论作为答案,所以在这种情况下他的完整答案有什么问题?
  • 我认为你是对的,即使问题的作者接受了评论中的答案
  • @Sinux1 最正确的方法可能是将其标记为社区 Wiki 答案。更多详情请见meta.stackoverflow.com/questions/343086/…
【解决方案2】:

创建一个包含make_sure_path_exists 的模块。需要时导入。

【讨论】:

    【解决方案3】:
    import os
    
    def main():
        dirName = 'C:/SANAL'
    
        # Create target directory & all intermediate directories if don't exists
        try:
            os.makedirs(dirName)    
            print("Directory " , dirName ,  " Created ")
        except FileExistsError:
            print("Directory " , dirName ,  " already exists")  
    
    if __name__ == '__main__':
        main()
    
    f = open('C:/SANAL/merhabadünya.txt','w')
    for i in range (10):
            f.write('MERHABA %d\r\n' % (i+1))
    
    f.close()
    
    f = open('C:/SANAL/merhabadünya.txt','r')
    message = f.read()
    print(message)
    
    f.close()       
    

    【讨论】:

    • 创建目录的示例,如果存在则跳过创建。还展示了使用 write、read 和 using 'for' 语句。
    【解决方案4】:

    从我生成此代码的不同答案中获得帮助

    if not os.path.exists(os.getcwd() + '/' + folderName):
        os.makedirs(os.getcwd() + '/' + folderName, exist_ok=True) 
    

    【讨论】:

    • 如果您要检查它实际上在条件中是否已经存在,为什么要将 exist_ok 标志设置为 True
    猜你喜欢
    • 2011-01-19
    • 2018-02-10
    • 2016-06-26
    • 2013-09-18
    • 2011-02-19
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多