Удаление и переименование каталога на основе состояния питона

голоса
0

У меня есть структура каталогов идентификатор порта и в этом каталоге Port 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)

Но не получил выход, Любое предложение

Спасибо

Задан 20/10/2018 в 05:10
источник пользователем
На других языках...                            


1 ответов

голоса
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']
Ответил 20/10/2018 в 06:12
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more