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
заявление