在子文件夹中创建文件夹

Create Folders within SubFolders

我是 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: [Errno 2] No such file or directory: '/Users/diunt-02/Desktop/Brown_Brothers/TEST/new/new'

我认为循环正在创建新文件夹,os.walk 找不到它们的路径。对于让 os.walk 进入下一层并在那里创建文件夹有什么建议吗?

如果您只是想在根目录的每个孙目录中创建一个子目录,使用 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

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

当然,您可以尝试在上下移动时跟踪关卡,或者您可能会看到如何从 dirpath 动态重新创建关卡,但为什么呢?如果你想做一些恰好向下 2 级的事情,不要遍历所有级别然后测试 2 级,只需向下 2 级。

这是我最终得到的代码,效果非常好!感谢@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)

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

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

你可以用递归的方式来解决你的问题。