python 2 [Ошибка 32] Процесс не может получить доступ к файлу, потому что он используется другим процессом

Я работаю с Python 2 и прочитал несколько сообщений об этой ошибке, т. Е. ( Этот пост). Тем не менее, я все еще получаю ошибку. Что я делаю: я читаю файлы в каталоге, если какой-либо из файлов содержит определенную строку, я удаляю каталог.

def select_poo():
path = os.walk('/paila_candonga/')
texto = 'poo'
extension = '.tex'
for root, dirs, files in path:
    for documento in files:
        if extension in documento:
            with open(os.path.join(root, documento), 'r') as fin:
                for lines in fin:
                    if texto in lines:
                        shutil.rmtree(root)
                    else:
                        continue

Тогда я получаю ошибку:

WindowsError: [Error 32] The process cannot access the file because it is being used by another process

Я также попытался использовать абсолютный путь:

def select_poo():
path = os.walk('/paila_candonga/')
texto = 'poo'
extension = '.tex'
for root, dirs, files in path:
    for documento in files:
        if extension in documento:
            with open(os.path.join(root, documento), 'r') as fin:
                for lines in fin:
                    if texto in lines:
                        route = (os.path.join(root, documento))
                        files = os.path.basename(route)
                        folder = os.path.dirname(route)
                        absolut= os.path.dirname(os.path.abspath(route))
                        todo = os.path.join(absolut, files)
                        print todo

                    else:
                        continue

Тогда я получу:

C:\paila_candonga\la_Arepa.tex
C:\paila_candonga\sejodio\laOlla.tex
C:\paila_candonga\sejodio\laPaila.tex

Если я удаляю один файл за раз, используя один и тот же абсолютный путь и os.remove(''), у меня не будет проблем. Если я попытаюсь удалить все файлы одновременно, используя select_poo() и shutil.rmtree(папка) или os.remove(absolut), у меня будет ошибка 32.

Есть ли способ, которым я могу сделать цикл по каждому из путей в todo и удалить их без ошибки 32?

Спасибо,

1 ответ

Это происходит здесь:

with open(os.path.join(root, documento), 'r') as fin:

Итак, ваш файл открыт и заблокирован, поэтому вы не можете удалить эту папку, используя:

shutil.rmtree(root)

в этом утверждении, вы должны сделать за пределами with заявление

Другие вопросы по тегам