在Python中的特定子文件夹中创建多个子文件夹

时间:2019-03-05 05:15:49

标签: python operating-system

如果我有一个文件夹test,其中包含多个子文件夹ABC等,则每个文件夹都具有相同的结构sub1,{{ 1}}和sub2

sub3

我只想在├─A │ ├─sub1 │ ├─sub2 │ └─sub3 ├─B │ ├─sub1 │ ├─sub2 │ └─sub3 └─C | ├─sub1 | ├─sub2 | └─sub3 ... a中创建名为bsub1的子文件夹,而忽略其他子文件夹(sub2)。这是预期的结果:

sub3...

我可以使用以下代码创建文件夹├─A │ ├─sub1|--a │ | |--b │ ├─sub2|--a │ | |--b │ └─sub3 ├─B │ ├─sub1|--a │ | |--b │ ├─sub2|--a │ | |--b │ └─sub3 └─C │ ├─sub1|--a │ | |--b │ ├─sub2|--a │ | |--b └─sub3 ... a,但是我不怎么做bsub1呢?谢谢。

sub2

更新:下面的代码不会创建子文件夹import os root_path =r"D:\test" sub_folders = ['a', 'b'] folders = [] for path in os.listdir(root_path): folders.append(os.path.join(root_path, path)) for f in folders: os.chdir(f) for sub_folder in sub_folders: os.mkdir(sub_folder) a

b

更新:感谢@Baltschun Ali,以下代码可以正常工作。

sub_folders = ['a', 'b']
folders = []

for path in os.listdir(root_path):
    if path in ('sub1', 'sub2'):
        folders.append(os.path.join(root_path, path))

for f in folders:
    os.chdir(f)
    for sub_folder in sub_folders:
        os.mkdir(sub_folder)

3 个答案:

答案 0 :(得分:1)

您可以在第一个if循环中使用for语句,以避免仅当路径是sub1sub2中的一个时才将路径添加到列表中。

for path in os.listdir(root_path):
   if path in ('sub1', 'sub2'):
       folders.append(os.path.join(root_path, path))

答案 1 :(得分:1)

您可以使用08/2019库:

glob

在Linux上进行过测试:

import glob, os

for new_dir_name in ('a','b'):
    for subn in ('sub1', 'sub2'):
        for sub_folder in glob.glob(os.path.join('*',subn), recursive=True):
            os.mkdir(os.path.join(sub_folder, new_dir_name))

结果:

$ mkdir -p {A,B}/sub1 {A,B,C}/sub2 
$ python make_sub_dirs.py # run the python script above
$ ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'

答案 2 :(得分:1)

更具动态性。

编辑代码

def create_sub_folder (*arg):
    if len(arg) < 3:
        for i in arg[0]:
            for j in arg[1]:
                path = i+"/"+j
                if os.path.exists(path) is False:
                    os.makedirs(path)
    else:      
        arg1 = [i+"/"+j for i in arg[0] for j in arg[1]]
        create_sub_folder(arg1,*(i for i in arg[2:]))

呼叫方法

create_sub_folder(['A','B'],['sub1','sub2'],['a','b'])

结果:

之前

enter image description here

之后

enter image description here

您可以传递3个以上级别的子文件夹 只需在arg

中传递更多数组
create_sub_folder([],[],[],[],[],[],['a','b'])