在子文件夹中创建文件夹

时间:2018-06-22 22:10:31

标签: python directory os.walk subdirectory

我是python的新手,我正在寻找一种在子文件夹中创建子文件夹的方法。我的文件树如下所示:

>> Main Folder
   >> Folder a
      >> Folder 1
      >> Folder 2
   >> Folder b
      >> Folder 1
      >> Folder 2

我正在寻找一种在最底层创建新文件夹(文件夹1和文件夹2)的方法。

我已经尝试过使用os.walk和os.path

for dirpath, subdirs, files in os.walk(current_path):
    for subdir in subdirs:
        filePath = os.path.abspath(subdir)
        newFolder = (filePath + "/new")
        if not os.path.exists(newFolder):
            os.mkdir(newFolder)

但这只会在第二级(文件夹a和文件夹b)中创建一个新文件夹,然后给我错误:

  

FileNotFoundError:[错误2]没有这样的文件或目录:'/ Users / diunt-02 / Desktop / Brown_Brothers / TEST / new / new'

我认为循环正在创建新文件夹,而os.walk无法找到它们的路径。有什么建议可以使os.walk移至下一层并在其中创建一个文件夹?

3 个答案:

答案 0 :(得分:0)

如果您只是想在根目录的每个子目录中创建一个子目录,则使用os.walk只会使事情更加混乱。我将解释原因,但首先,我将解释更简单的方法。

只需显式地向下循环两个级别:

for child in os.scandir(current_path):
    if child.is_dir():
        for grandchild in os.scandir(child.path):
            newpath = os.path.join(grandchild.path, 'new')
            os.path.mkdir(newpath)

现在,为什么您现有的代码被破坏了?

walk遍历整棵树。它会访问您的根,孩子,孙子,曾孙,甚至是您在行走过程中创建的新孙子。

例如,尝试以下操作:

for dirpath, _, _ in os.walk(current_path):
    print(dirpath)

您得到的是:

.
./Folder b
./Folder b/Folder 2
./Folder b/Folder 1
./Folder a
./Folder a/Folder 2
./Folder a/Folder 1

它将所有不同的“级别”混合在一起。但是,您不想在每个级别上都做相同的事情。您只想在孙子代中创建新目录,而不是子孙,也不应该在曾孙中创建新目录,尤其是在创建过程中创建的任何后代中。

当然,您可以尝试在上下移动时保持水平,或者可以看到如何从dirpath即时重新创建它,但是为什么呢?如果您想做2级以下的事情,请不要遍历所有级别,然后再测试2级,只需降低2级即可。

答案 1 :(得分:0)

这是我最终得到的代码,效果很好!感谢@abarnert很好地解释了为什么os.walk没有用!

for child in os.scandir(current_path):
if child.is_dir():
    for grandchild in os.scandir(child.path):
        # newpath = os.path.join(grandchild.path, 'new')
        # os.mkdir(newpath)
        if grandchild.is_dir():
            newpath = os.path.join(grandchild.path, 'new')
            os.mkdir(newpath)

答案 2 :(得分:0)

只需使用os.makedirs。它会自动创建必要的父文件夹。

path = 'Main Folder/Folder a/Folder 1'
if not (os.path.exists(path)):
    os.makedirs(path)

您可以递归地使用它来解决问题。

相关问题