Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 20, 2012 12:34:15

bv7
Зарегистрирован: 2012-11-20
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Удаление директории

Доброго времени суток.
Требуется оставить только директории /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)

Офлайн

#2 Ноя. 20, 2012 18:47:31

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Удаление директории

Офлайн

#3 Ноя. 21, 2012 20:31:55

bv7
Зарегистрирован: 2012-11-20
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Удаление директории

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. Как обработать кирилические дректории?

Офлайн

#4 Ноя. 21, 2012 22:49:54

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Удаление директории

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)



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Отредактировано JOHN_16 (Ноя. 21, 2012 22:50:16)

Офлайн

#5 Ноя. 22, 2012 01:43:55

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10014
Репутация: +  857  -
Профиль   Отправить e-mail  

Удаление директории

не, там дело не в кодировках, он вместо “Документы” написал “Докуметны”



Офлайн

#6 Ноя. 23, 2012 17:28:04

bv7
Зарегистрирован: 2012-11-20
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Удаление директории

py.user.next
не, там дело не в кодировках, он вместо “Документы” написал “Докуметны”
не в скрипт я копипастил, а на форуме действительно была опечатка.

Офлайн

#7 Ноя. 24, 2012 22:40:22

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10014
Репутация: +  857  -
Профиль   Отправить e-mail  

Удаление директории

без юникодовых строк всё работает
а вот когда сверху написано #coding: utf-8, а файл в cp1251, то отрабатывает без исключений, но стирает каталоги на русском



Офлайн

#8 Ноя. 25, 2012 14:45:36

bv7
Зарегистрирован: 2012-11-20
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Удаление директории

т.е. предлагаешь написать #coding: cp1251 во второй строке скпита? Или файл в cp1251 создавать?
Вроде как в unix файлы в utf-8 создаются.

Офлайн

#9 Ноя. 26, 2012 01:20:35

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10014
Репутация: +  857  -
Профиль   Отправить e-mail  

Удаление директории

bv7
написать #coding: cp1251 во второй строке скпита? Или файл в cp1251 создавать?
сначала выяснить кодировку исходного файла, а затем сделать так, чтобы объявленная кодировка и кодировка исходного файла были равны

bv7
Вроде как в unix файлы в utf-8 создаются.
*nix систем множество, и настройки по умолчанию в них разные
но кодировка файла не только от системы зависит, а ещё и от редактора



Офлайн

#10 Ноя. 28, 2012 19:24:16

bv7
Зарегистрирован: 2012-11-20
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Удаление директории

вопрос решен, тему можно закрыть. Действительно файл был создан в кодировке ср1251, а в скрипте указано utf-8. После сохранения в кодировке utf-8 все стало работать как часы.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version