#python #automation #python-watchdog
Вопрос:
Я создал приведенный ниже код, запускающий процесс переименования файла изображения, добавленного в каталог. Данные о переименовании обновляются на листе Excel за 20 секунд до загрузки файла изображения.
Код отлично работает в течение 1 итерации, а затем показывает код ошибки: Указано после кода.
Пожалуйста, дайте мне знать, где я ошибаюсь.
import watchdog.events
import watchdog.observers
import time
import pandas as pd
import glob
import os
import os.path
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
date = time.strftime("%Y%m%d")
print(date)
path = r"K:A100_COMMONA150_TRANSFER_AREA_1DAY_VALIDITYSuhas\" date # r'CAM1'
class OnMyWatch:
# Set the directory on watch
watchDirectory = path
def __init__(self):
self.observer = Observer()
def run(self):
event_handler = Handler()
self.observer.schedule(event_handler, self.watchDirectory, recursive = True)
self.observer.start()
try:
while True:
time.sleep(5)
except:
self.observer.stop()
print("Observer Stopped")
self.observer.join()
class Handler(FileSystemEventHandler):
@staticmethod
def on_any_event(event):
if event.is_directory:
return None
elif event.event_type == 'created':
# Event is created, you can process it now
img_folder = os.listdir(path)
print(path, img_folder)
img_name = []
for img in img_folder:
name, ext = img.split(".")
img_name.append(name)
print(img_name)
time_chunk=[]
for x in img_name:
y = x[:11]
time_chunk.append(y)
print(time_chunk)
df = pd.read_excel(r"K:A100_COMMONA150_TRANSFER_AREA_1DAY_VALIDITYSuhasg-ng.xlsx")
engine_no = df['engine_no'].iloc[-1]
date_time = str(df['date_time'].iloc[-1])
print(engine_no)
print(date_time[:11])
no = 0
for i in time_chunk:
old_path = path "\" img_name[no] '.bmp'
print(img_name[no])
#old_folder.append(old_path)
new_path = path "\" engine_no '_' str(no) '.bmp'
print(i)
no = 1
if i == date_time[:11]:
rename = os.rename(old_path, new_path)
if __name__ == '__main__':
watch = OnMyWatch()
watch.run()
#Works Once
сообщение об ошибке:
Исключение в потоке Поток-6: Трассировка (последний последний вызов): Файл «C:Usersshreyas.bkAnaconda3libthreading.py», строка 932, в файле _bootstrap_inner self.run () «C:Usersshreyas.bkAnaconda3libsite-packageswatchdogobserversapi.py», строка 199, в файле run self.dispatch_events(self.event_queue, self.timeout) «C:Usersshreyas.bkAnaconda3libsite-packageswatchdogobserversapi.py», строка 372, в файле обработчика dispatch_events.отправка(событие) «C:Usersshreyas.bkAnaconda3libsite-packageswatchdogevents.py», строка 260, в диспетчерской «я».Файл on_any_event(событие)»», строка 86, в разрешении on_any_event Ошибка: [Ошибка 32] Процесс не может получить доступ к файлу, поскольку он используется другим процессом: ‘K:A100_COMMONA150_TRANSFER_AREA_1DAY_VALIDITYSuhas\20210907210426_141919_0000000004_CAM1_OK.bmp’ -> ‘K:A100_COMMONA150_TRANSFER_AREA_1DAY_VALIDITYSuhas\202109071GDA536685_3.bmp»