如果我有一个文件夹test
,其中包含多个子文件夹A
,B
,C
等,则每个文件夹都具有相同的结构sub1
,{{ 1}}和sub2
:
sub3
我只想在├─A
│ ├─sub1
│ ├─sub2
│ └─sub3
├─B
│ ├─sub1
│ ├─sub2
│ └─sub3
└─C
| ├─sub1
| ├─sub2
| └─sub3
...
和a
中创建名为b
和sub1
的子文件夹,而忽略其他子文件夹(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
,但是我不怎么做b
和sub1
呢?谢谢。
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)
答案 0 :(得分:1)
您可以在第一个if
循环中使用for
语句,以避免仅当路径是sub1
和sub2
中的一个时才将路径添加到列表中。
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'])
结果:
之前
之后
您可以传递3个以上级别的子文件夹 只需在arg
中传递更多数组create_sub_folder([],[],[],[],[],[],['a','b'])