Восстановление файлов из корзины в python

Есть ли способ восстановить файлы из корзины в python?

Вот код:

from send2trash import send2trash

file_name = "test.txt"

operation = input("Enter the operation to perform[delete/restore]: ")

if operation == "delete":
    send2trash(file_name)
    print(f"Successfully deleted {file_name}")

else:
    # Code to restore the file from recycle bin.
    pass

Здесь, когда я набираю "restore" в функции input(), я хочу восстановить удаленный файл из корзины.

Есть ли способ добиться этого в python?

Было бы здорово, если бы кто-нибудь мог мне помочь.

РЕДАКТИРОВАТЬ:

Спасибо за ответ @Kenivia, но я столкнулся с одной небольшой проблемой:

import winshell

r = list(winshell.recycle_bin())  # this lists the original path of all the all items in the recycling bin
file_name = "C:\\test\\Untitled_1.txt" # This file is located in the recycle bin

index = r.index(file_name) # to determine the index of your file

winshell.undelete(r[index].original_filename())

Когда я запускаю этот код, я получаю сообщение об ошибке: ValueError: 'C:\\test\\Untitled_1.txt' is not in list. Не могли бы вы мне помочь?


person Lenovo 360    schedule 16.03.2021    source источник


Ответы (1)


Это будет зависеть от вашей операционной системы.

Линукс

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

Существует инструмент командной строки, который вы можете использовать или копаться в коде, чтобы получить некоторые идеи. .

import subprocess as sp # here subprocess is just used to run the command, you can also use os.system but that is discouraged

sp.run(['mv','/home/USERNAME/.local/share/Trash/files/test.txt', '/ORIGINAL/PATH/')

macOS

В macOS вы делаете то же самое, что и в Linux, за исключением того, что путь к корзине — ~/.Trash.

import subprocess as sp

sp.run(['mv','~/.Trash/test.txt', '/ORIGINAL/PATH/')

Обратите внимание, что macOS хранит информацию о файлах по адресу ~/.Trash/.DS_Store, тогда как Linux хранит их по адресу /home/USERNAME/.local/share/Trash/info/. Это может быть полезно, если вы не знаете исходный путь к файлам.

Windows

вы должны использовать winshell. Дополнительные сведения см. в этой статье.

import winshell 

r = list(winshell.recycle_bin())  # this lists the original path of all the all items in the recycling bin
index = r.index("C:\ORIGINAL\PATH\test.txt") # to determine the index of your file

winshell.undelete(r[index].original_filename())
person Kenivia    schedule 16.03.2021
comment
Привет, спасибо за ваш ответ, но когда я использую r.index(file), python выдает мне ошибку ValueError: 'file' is not in list, хотя путь к файлу, который я указал, правильный. Есть ли способ исправить это? - person Lenovo 360; 16.03.2021
comment
Возможно, вы использовали r.index("file") вместо r.index(file), если нет, распечатайте список r и найдите путь к вашему текстовому файлу. - person Kenivia; 16.03.2021
comment
Я попытался распечатать список, и путь к файлу в списке, кажется, совпадает с путем, который я указал. - person Lenovo 360; 16.03.2021
comment
тот факт, что в сообщении об ошибке упоминается 'file', означает, что вы ввели строку - "file" вместо переменной с именем file. Можешь еще раз проверить, правильно ли ты передал в r.index()? - person Kenivia; 16.03.2021
comment
Не могли бы вы показать мне весь свой код, либо отредактировав вопрос, либо отправив его в комментарии? - person Kenivia; 16.03.2021
comment
Я использовал что-то вроде index = r.index(x), где x — это переменная, в которой хранится путь к файлу. - person Lenovo 360; 16.03.2021
comment
Давайте продолжим обсуждение в чате. - person Kenivia; 16.03.2021