Проблема с [WinError 32] при работе с файлами
Делаю скрипт, который будет сортировать мои загрузки.
Он нормально переносит фотографии (jpg, png), но когда я пытаюсь перенести html или rar файл, то появляется ошибка:
Процесс не может получить доступ к файлу, так как этот файл занят другим процессом: 'D:/Downloads/HW.rar' -> 'D:/DownloadsSorted/Archives/HW.rar'
Каким образом можно решить?
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import os
import time
class Handler(FileSystemEventHandler):
def on_modified(self, event):
for filename in os.listdir(folder):
extension = filename.split('.')
if len(extension) > 1 and (extension[1].lower() == 'jpg' or extension[1].lower() == 'png' or extension[1].lower() == 'svg'):
file = folder + '/' + filename
new_path = folder_new + '/Images/' + filename
os.rename(file, new_path)
elif len(extension) > 1 and extension[1].lower() == 'html':
print()
file = folder + '/' + filename
new_path = folder_new + '/HTMLfiles/' + filename
os.rename(file, new_path)
elif len(extension) > 1 and (extension[1].lower() == 'mp4' or extension[1].lower() == 'pcm' or extension[1].lower() == 'wav'):
file = folder + '/' + filename
new_path = folder_new + '/Music/' + filename
os.rename(file, new_path)
elif len(extension) > 1 and (extension[1].lower() == 'ppt' or extension[1].lower() == 'pptjpeg' or extension[1].lower() == 'pptpng' or extension[1].lower() == 'pptx'):
file = folder + '/' + filename
new_path = folder_new + '/PowerPoint/' + filename
os.rename(file, new_path)
elif len(extension) > 1 and (extension[1].lower() == 'py'):
file = folder + '/' + filename
new_path = folder_new + '/PyFiles/' + filename
os.rename(file, new_path)
elif len(extension) > 1 and (extension[1].lower() == 'sql'):
file = folder + '/' + filename
new_path = folder_new + '/SQLfiles/' + filename
os.rename(file, new_path)
elif len(extension) > 1 and (extension[1].lower() == 'torrent'):
file = folder + '/' + filename
new_path = folder_new + '/Torrent/' + filename
os.rename(file, new_path)
elif len(extension) > 1 and (extension[1].lower() == 'avi' or extension[1].lower() == 'm4v' or extension[1].lower() == 'flv'):
file = folder + '/' + filename
new_path = folder_new + '/Videos/' + filename
os.rename(file, new_path)
elif len(extension) > 1 and (extension[1].lower() == 'docx' or extension[1].lower() == 'doc' or extension[1].lower() == 'docm'):
file = folder + '/' + filename
new_path = folder_new + '/Word/' + filename
os.rename(file, new_path)
elif len(extension) > 1 and (extension[1].lower() == 'rar' or extension[1].lower() == 'zip' or extension[1].lower() == '7zip'):
file = folder + '/' + filename
new_path = folder_new + '/Archives/' + filename
os.rename(file, new_path)
else:
file = folder + '/' + filename
new_path = folder_new + '/Else/' + filename
os.rename(file, new_path)
folder = 'D:/Downloads'
folder_new = 'D:/DownloadsSorted'
handle = Handler()
obserser = Observer()
obserser.schedule(handle, folder, recursive=True)
obserser.start()
try:
while(True):
time.sleep(10)
except KeyboardInterrupt:
obserser.stop()
obserser.join()
Ответы (1 шт):
Автор решения: Alexandr Kiselev
→ Ссылка
Решил проблему, добавив в начало цикла:
def on_modified(self, event):
for filename in os.listdir(folder):
time.sleep(2)
try:
extension = filename.split('.')
except FileNotFoundError:
time.sleep(5)
continue
if extension[1] == 'tmp':
time.sleep(5)
continue