Изменение имени файла в зависимости от ввода пользователя - PullRequest
1 голос
/ 03 августа 2020

Я пытаюсь создать проект, который позволит пользователю автоматически сортировать свои файлы в папке загрузок на основе ключевых слов в имени файла. Часть этой программы позволяет пользователю выбрать имя файла, чтобы его можно было правильно отсортировать. У меня возникают проблемы с тем, чтобы пользователь мог назвать свой файл при появлении запроса.

from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

import os
import json
import time

#Folders
folder_to_track = 'C:/Users/physi/Downloads'

image_destination = 'C:/Users/physi/Desktop/Images'

class MyHandler(FileSystemEventHandler):
    i = 1
    def on_modified(self, event): 
        for filename in os.listdir(folder_to_track):
            time.sleep(5)
            new_title = input("File Name: ")
            extension = str(input("Extension: "))
            new_name = folder_to_track + "/" + str(new_title + "." + extension)
            os.rename(folder_to_track + "/" + filename, new_name)
            time.sleep(2)
            print("File Renamed!")

            time.sleep(10)
            src = folder_to_track + "/" + new_name
            if 'Image' in new_name:
                new_destination = image_destination + "/" + new_name
                os.rename(src, new_destination)

event_handler = MyHandler()
observer = Observer()
observer.schedule(event_handler, folder_to_track, recursive=True)
observer.start()

try:
    while True:
        time.sleep(10)
except KeyboardInterrupt:
    observer.stop()
observer.join()```

Выше приведен код, который я написал до сих пор. Когда этот код запускается, он может определить, когда новый файл добавлен в папку загрузок, но как только он предлагает пользователю назвать свой файл, он предлагает им это сообщение об ошибке ... ``

Traceback (most recent call last):
 File "C:\Users\physi\AppData\Local\Programs\Python\Python38-32\lib\threading.py", line 932, in _bootstrap_inner
   self.run()
 File "C:\Users\physi\AppData\Local\Programs\Python\Python38-32\lib\site-packages\watchdog\observers\api.py", line 203, in run
   self.dispatch_events(self.event_queue, self.timeout)
 File "C:\Users\physi\AppData\Local\Programs\Python\Python38-32\lib\site-packages\watchdog\observers\api.py", line 376, in dispatch_events
   handler.dispatch(event)
 File "C:\Users\physi\AppData\Local\Programs\Python\Python38-32\lib\site-packages\watchdog\events.py", line 331, in dispatch
   {
 File "C:\Users\physi\Desktop\File_Management.py", line 33, in on_modified
   os.rename(filename, new_name)
FileNotFoundError: [WinError 2] The system cannot find the file specified: '37ea886b-25ed-4469-a13c-9c5fbf3ddd09.tmp' -> 'C:/Users/physi/Downloads/Hubble_Image..jfif'```

Может ли кто-нибудь помочь мне исправить эту программу, чтобы пользователь мог переименовать свой файл, а затем автоматически сохранить и отсортировать его. Спасибо, я ценю помощь!

Этот код был вдохновлен Youtube видео Калле Холдена

1 Ответ

1 голос
/ 03 августа 2020

Я вижу, что в вашем коде вы не добавляете имя файла к имени базового каталога.

Эта строка

os.rename(filename, new_name)

должна быть изменена на

os.rename(folder_to_track+"/"+filename, new_name)
...