我有一个目录结构,一个端口ID,并且该端口ID目录中包含其类型的子目录,并且在该端口类型目录中,它可能有也可能没有一些.jpg文件,
Port ID- **11852**---> 20Port_1
---> 25Port_1 ---> 1.jpg
---> 25Port_2
---> 25Port_3 --> abc.jpg
---> 75Port_1
---> 75Port_2 --> pqr.jpg
因此,目录名称“ 11852”由6个子目录组成,我们只有一种类型的20Port
,因此其名称末尾是_1
,同样,我们有3种类型的25Port
如此_1,_2,_3
依此类推。
我想做的是进入11852
目录的每个子目录,并检查它们是否确实包含任何.jpg
文件,如果不是,则删除该子目录
例如检查子目录20Port_1
中是否包含任何.jpg文件,因为其中没有任何文件,请删除文件夹20Port_1
。
现在检查25Port_1
,因为它内部有一个文件,请保持原样。下一个目录25_Port_2
里面也没有文件,因此将其删除,下一个目录25Port_3
里面有一个文件(现在是问题所在),保持原样,但将其重命名为上一个组类型编号,即将25Port_3
的名称更改为25Port_2
,
类似地,将75Port_2
重命名为75Port_1
,因为75Port_1
里面没有任何文件。
所以最后我的目录结构应该像
Port ID- **11852** --> 25Port_1 --> 1.jpg
--> 25Port_2 --> abc.jpg
--> 75Port_1 --> pqr.jpg
我尝试过
import os
import shutil
fold_list = os.listdir("D/Port ID Folder/11852")
for m in fold_list:
k=0
if len(os.listdir('D/Port ID Folder/11852/'+fold_list[k])) ==0:
x = (fold_list[k].rsplit('_',1)[0]) == (fold_list[k+1].rsplit('_',1)[0])
if x == False:
shutil.rmtree('D/Port ID Folder/11852/'+m)
else:
val = fold_list[k].rsplit('_',1)[1]
shutil.rmtree('D/Port ID Folder/11852/'+m)
但是没有输出, 任何建议
谢谢
答案 0 :(得分:1)
import os
import shutil
src_dir = "D/Port ID Folder/11852"
f_list = os.listdir(src_dir)
print(f'Initial directory listing {f_list}')
retain_list = []
for folder in f_list:
if len(os.listdir(os.path.join(src_dir,folder))):
# Folder not empty
base, n = folder.rsplit('_',1)
if base not in retain_list:
retain_list.append(base)
else:
shutil.rmtree(os.path.join(src_dir,folder))
f_list = os.listdir(src_dir)
print(f'Directory listing after removing empty folders {f_list}')
for f in retain_list:
i = 1
for folder in f_list:
base, n = folder.rsplit('_',1)
if f == base:
os.rename(os.path.join(src_dir,folder),os.path.join(src_dir,f'{base}_{i}'))
i += 1
f_list = os.listdir(src_dir)
print(f'Final directory listing {f_list}')
输出
Initial directory listing ['20Port_1', '25Port_1', '25Port_2', '25Port_3', '75Port_1', '75Port_2']
Directory listing after removing empty folders ['25Port_1', '25Port_3', '75Port_2']
Final directory listing ['25Port_1', '25Port_2', '75Port_1']