2016-10-19 4 views
0

Я работаю с python 2 и прочитал несколько сообщений об этой ошибке i.e (this post). Однако я все еще получаю ошибку. Что я делаю: Я читал файлы в каталоге, если какой-либо из файлов содержит определенную строку, я удаляю каталог.python 2 [Ошибка 32] Процесс не может получить доступ к файлу, потому что он используется другим процессом

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 

Если я удалить один файл за раз, используя тот же абсолютный путь, d 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 заявление

+0

Спасибо Алекс, но это не будет Работа. Ошибка все еще существует = ( –

+0

@ Chüngel, вы уверены, что у вас нет этой папки или какого-либо файла из этой папки, открытого в любом другом приложении? – Alex

+0

Alex, я довольно новичок в Python, но если я удалю файлы с помощью os .remove (absolut) одни и те же файлы будут удалены без ошибок. Поэтому я считаю, что ошибка вызвана процессом, за который я удаляю все файлы одновременно. Как вы предположили, я определил переменную x = [], а затем строка найдена в документе, путь будет добавлен в x. Затем за пределами инструкции with я выполняю os.remove (x [0]), но затем получаю точно такую ​​же ошибку. Не могли бы вы предложить версию для мой код, основанный на вашей идее? –

 Смежные вопросы

  • Нет связанных вопросов^_^