Найти - Пользователи
Полная версия: Удаление директории
Начало » Python для новичков » Удаление директории
1
bv7
Доброго времени суток.
Требуется оставить только директории /temp/2, /temp/n остальные удалить со всем их содержимым.
Видел решение подобной задачи, но оно было с файлами.
Директории /temp/2 и /temp/n могут быть пустыми, в них могут содержаться файлы или пустые директории.
/temp
/temp/1
/temp/1/…
/temp/2
/temp/3/…/…
/temp/4

/temp/n
Вот что нашел, только не знаю как применить это к моей задаче:

# DeleteDir - remove whole directory trees like rm -r
import shutil
shutil.rmtree(path)
 
# DON'T DO THIS:
import os, sys
def DeleteDir(dir):
    for name in os.listdir(dir):
        file = os.path.join(dir, name)
        if not os.path.islink(file) and os.path.isdir(file):
            DeleteDir(file)
        else:
 
            os.remove(file)
    os.rmdir(dir)
sanodin
http://pythoner.name/walk
bv7
python 2.6.6
import glob
import os
import shutil
 
path = 'path'
exclude = set(('dir1',
               'dir2',
               'dir3'))
 
dirs = (d for d in glob.iglob(os.path.join(path, '*'))
        if os.path.isdir(d) and
           os.path.basename(d) not in exclude)
 
map(shutil.rmtree, dirs)
Решил проблему таким образом, вот только удаляет директории написаные кирилицей, даже если они описаны в секции exclude. Как обработать кирилические дректории?
JOHN_16
bv7
наверняка дело в кодировках, попробуйте использовать везде Unicode
import glob
import os
import shutil
 
path = u'path'
exclude = set((u'dir1',
               u'dir2',
               u'dir3'))
 
dirs = (d for d in glob.iglob(os.path.join(path, u'*'))
        if os.path.isdir(d) and
           os.path.basename(d) not in exclude)
 
map(shutil.rmtree, dirs)
py.user.next
не, там дело не в кодировках, он вместо “Документы” написал “Докуметны”
bv7
py.user.next
не, там дело не в кодировках, он вместо “Документы” написал “Докуметны”
не в скрипт я копипастил, а на форуме действительно была опечатка.
py.user.next
без юникодовых строк всё работает
а вот когда сверху написано #coding: utf-8, а файл в cp1251, то отрабатывает без исключений, но стирает каталоги на русском
bv7
т.е. предлагаешь написать #coding: cp1251 во второй строке скпита? Или файл в cp1251 создавать?
Вроде как в unix файлы в utf-8 создаются.
py.user.next
bv7
написать #coding: cp1251 во второй строке скпита? Или файл в cp1251 создавать?
сначала выяснить кодировку исходного файла, а затем сделать так, чтобы объявленная кодировка и кодировка исходного файла были равны

bv7
Вроде как в unix файлы в utf-8 создаются.
*nix систем множество, и настройки по умолчанию в них разные
но кодировка файла не только от системы зависит, а ещё и от редактора
bv7
вопрос решен, тему можно закрыть. Действительно файл был создан в кодировке ср1251, а в скрипте указано utf-8. После сохранения в кодировке utf-8 все стало работать как часы.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB