Форум сайта python.su
0
Доброго времени суток.
Требуется оставить только директории /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)
Отредактировано bv7 (Ноя. 20, 2012 12:36:18)
Офлайн
31
Офлайн
0
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)
Офлайн
221
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)
Отредактировано JOHN_16 (Ноя. 21, 2012 22:50:16)
Офлайн
857
не, там дело не в кодировках, он вместо “Документы” написал “Докуметны”
Офлайн
0
py.user.nextне в скрипт я копипастил, а на форуме действительно была опечатка.
не, там дело не в кодировках, он вместо “Документы” написал “Докуметны”
Офлайн
857
без юникодовых строк всё работает
а вот когда сверху написано #coding: utf-8, а файл в cp1251, то отрабатывает без исключений, но стирает каталоги на русском
Офлайн
0
т.е. предлагаешь написать #coding: cp1251 во второй строке скпита? Или файл в cp1251 создавать?
Вроде как в unix файлы в utf-8 создаются.
Офлайн
857
bv7сначала выяснить кодировку исходного файла, а затем сделать так, чтобы объявленная кодировка и кодировка исходного файла были равны
написать #coding: cp1251 во второй строке скпита? Или файл в cp1251 создавать?
bv7*nix систем множество, и настройки по умолчанию в них разные
Вроде как в unix файлы в utf-8 создаются.
Офлайн
0
вопрос решен, тему можно закрыть. Действительно файл был создан в кодировке ср1251, а в скрипте указано utf-8. После сохранения в кодировке utf-8 все стало работать как часы.
Офлайн