Удалить и переименовать каталог на основе условия Python - PullRequest
0 голосов
/ 20 октября 2018

У меня есть структура каталогов с идентификатором порта, и в этом каталоге идентификатора порта есть подкаталоги своего типа, и в этом каталоге типа порта он может иметь или не иметь некоторые файлы .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 голосов
/ 20 октября 2018
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']
...