【问题标题】:How to loop to create folders? [duplicate]如何循环创建文件夹? [复制]
【发布时间】:2021-10-15 07:14:44
【问题描述】:

我想创建从 0 到 9 的多个文件夹。 在每个文件夹中,又有从 0 到 9 的文件夹,依此类推。

重复第 5 个目录或第 10 个目录或任何我想要的。

代码

import os
for a in range(10):
    os.makedirs("D:/Test/"+str(a))
    for b in range(10):
        os.makedirs("D:/Test/"+str(a)+"/"+str(b))
        for c in range(10):
            os.makedirs("D:/Test/"+str(a)+"/"+str(b)+"/"+str(c))
            for d in range(10):
                os.makedirs("D:/Test/"+str(a)+"/"+str(b)+"/"+str(c)+"/"+str(d))
                for e in range(10):
                    os.makedirs("D:/Test/"+str(a)+"/"+str(b)+"/"+str(c)+"/"+str(d)+"/"+str(e))
                    for f in range(10):
                        os.makedirs("D:/Test/"+str(a)+"/"+str(b)+"/"+str(c)+"/"+str(d)+"/"+str(e)+"/"+str(f))
                        for g in range(10):
                            os.makedirs("D:/Test/"+str(a)+"/"+str(b)+"/"+str(c)+"/"+str(d)+"/"+str(e)+"/"+str(f)+"/"+str(g))
                            for h in range(10):
                                os.makedirs("D:/Test/"+str(a)+"/"+str(b)+"/"+str(c)+"/"+str(d)+"/"+str(e)+"/"+str(f)+"/"+str(g)+"/"+str(h))
                                for i in range(10):
                                    os.makedirs("D:/Test/"+str(a)+"/"+str(b)+"/"+str(c)+"/"+str(d)+"/"+str(e)+"/"+str(f)+"/"+str(g)+"/"+str(h)+"/"+str(i))

我编写的代码很长而且是手动的。相反,我想为每个要添加的目录创建一个循环。

【问题讨论】:

  • 这将创建1,000,000,000 目录。如果创建目录需要 1 毫秒,则需要 11 天以上才能完成。但在那之前你会填满你的磁盘。
  • 您可以使用range(1000000000),然后将其拆分为数字。只需制作序列中的最后一个目录,os.makedirs() 会自动制作中间目录。
  • 是的,但是创建这么多文件夹有什么意义呢?
  • @DaniyalWarraich 我刚开始学习 python,所以我把它作为练习,我从我看到的 meme 中获得了灵感
  • 提防rm -r * meme。

标签: python recursion directory


【解决方案1】:

正如我在评论中提到的,这将永远占用您的磁盘空间。但这里有一个更简单的方法:

for i in range(1000000000):
    dir = os.path.join('C:/Test', *f"{i:09d}")
    os.makedirs(dir)

f"{i:09d}" 会将数字转换为带有前导零的字符串,* 之前会将每个数字分散到os.path.join() 的单独参数中。

您不需要在每一层嵌套调用os.makedirs(),因为它会在必要时自动创建中间目录。

【讨论】:

    【解决方案2】:

    在编程中,当需要重复运行相同的代码时,应该在一个方法/函数中:

    def my_fn(path):
      for a in range(10):
        os.makedirs(os.path.join(path,str(a)))
    

    这样的嵌套称为recursion。基本上,您的函数需要在最后一步调用自身,但知道 何时 停止很重要;解决方案是有一个停止变量:

    def my_fn(path, depth=0):
      if depth >= 5:
        # stop creating folders after 5 folders deep
        return
    
      <create folders>
    
      for fol in list_of_new_folders:
        my_fn(os.path.join(path,fol), depth+1)
    

    【讨论】:

    • 问题是你不能太深入,而且你的代码似乎有语法错误,或者至少你放错了括号
    • (括号固定 ?)您可以 [尝试] 尽可能深入 - 这是否是一个好主意是一个有效的问题,已在主要的 cmets 中指出问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 2016-01-30
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    相关资源
    最近更新 更多