根据条件python

时间:2018-10-20 05:10:59

标签: python list directory

我有一个目录结构,一个端口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)

但是没有输出, 任何建议

谢谢

1 个答案:

答案 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']