Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Python: Поиск и удаление пустых саб дирректорий по указанному пути / 3 сообщений из 3, страница 1 из 1
19.06.2014, 16:15
    #38674520
zeuge
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python: Поиск и удаление пустых саб дирректорий по указанному пути
Здравствуйте уважаемые.
Совсем недавно начал изучение Python. Возникла конкретная задача, которую пока что не удаётся победить:
Есть дирректория, которая находится по адресу, например C:/test_data/, в которой могут находиться другие папки, а в этих папках ещё папки и тд. В некоторых дирректориях есть файлы, а каких-то из них нет, они пустые. Так вот задача в том, чтобы найти все пустые дирректории и саб дирректории по указаннмоу выше пути и удалить их.
Я пытался сделать это так:

import os
pdir = 'C:/test_data/' #путь к дерриктории
contdir = []
for i in os.walk(pdir):
contdir.append(i)

for i in contdir:
print(i) # тут я получаю картежи (адрес каталога, список поддиректорий и имена файлов, если они есть),

получаю такую картинку:

('C:/test_data/', ['data', 'test_cases_py', 'test_data_java', 'test_py1', 'test_py2'], ['test_data1.fi', 'test_data2.fa', 'test_data3.fu'])
('C:/test_data/data', [], ['test_py.fi', 'test_py1.fi', 'test_py2.fa'])
('C:/test_data/test_cases_py', [], [])
('C:/test_data/test_data_java', ['sub_folder'], ['test_file.fa', 'test_file1.fi'])
('C:/test_data/test_data_java\\sub_folder', [], ['test_doc.fa'])
('C:/test_data/test_py1', ['test_cases_jv'], ['test_data_jv.fu', 'test_data_py.fi'])
('C:/test_data/test_py1\\test_cases_jv', [], [])
('C:/test_data/test_py2', [], [])

и вот дальше мне надо найти пустые поддиректории на всех уровнях и удалить их.
Пытался определить пустые поддиректории так:

if os.listdir(pdir) == []:
print('Empty')

но тут проблема в том, что ищется только пустая папка по указанному пути, а глубже он не лезет искать пустые поддиректории.

Помогите пожалуйста разобраться , как же реализовать данную задачу.
...
Рейтинг: 0 / 0
20.06.2014, 09:47
    #38674996
FishHook
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python: Поиск и удаление пустых саб дирректорий по указанному пути
Гуглить рекурсию.

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
#! /usr/bin/env python
import os, sys

def removeEmptyFolders(path):
  if not os.path.isdir(path):
    return

  # remove empty subfolders
  files = os.listdir(path)
  if len(files):
    for f in files:
      fullpath = os.path.join(path, f)
      if os.path.isdir(fullpath):
        removeEmptyFolders(fullpath)

  # if folder empty, delete it
  files = os.listdir(path)
  if len(files) == 0:
    print "Removing empty folder:", path
    os.rmdir(path)

removeEmptyFolders(sys.argv[1])
...
Рейтинг: 0 / 0
20.06.2014, 09:57
    #38675003
zeuge
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python: Поиск и удаление пустых саб дирректорий по указанному пути
FishHook , да, я много чего нагуглил и этот пример, который вы скинули в том числе.
Так же из разных примеров удалось собрать что-то такое:

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
import os
from os.path import join, isfile

def walksub(dir):
    isEmpty=True
    subDirs=[]
    for entry in os.listdir(dir):
        try:
            if isfile(join(dir,entry))==True:
                isEmpty = False
            else:
                subEmpty = walksub(join(dir, entry))
                if subEmpty==True:
                    subDirs.append(join(dir, entry))
                else:
                    isEmpty=False
        except:
            print('error checking: '+entry)
            isEmpty=False
    if isEmpty == False:
        for subDir in subDirs:
            print(subDir)
    return isEmpty

walksub('C:/test_data/')



Но вот чёткого понимания как это всё работает (рекурсивный поиск) пока что нету.
Спасибо в любом случае, буду разбираться.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Python: Поиск и удаление пустых саб дирректорий по указанному пути / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]