У меня есть модифицированная версия этого действительно классный сценарий это было написано более половины десятилетия назад, чтобы реорганизовать действительно большие папки, полные случайных файлов, в соответствующие каталоги. Мои модификации не имеют отношения к вопросу, поэтому я буду использовать исходный скрипт в своем примере ниже.
Я настроил его так, чтобы он запрашивал пользовательский ввод вместо жесткого кодирования переменных в сценарии (показано ниже между МОИ ТЕКУЩИЕ ПРАВКИ
комментарии), и это, кажется, работает достаточно хорошо, но я беспокоюсь, что это может в конечном итоге случайно съесть весь каталог, с которым я не собираюсь работать, если я допущу ошибку.
Вопросы:
Есть ли способ, с помощью которого я могу заставить его запрашивать у пользователя reorg_dir
таким образом, он позволяет пользователю прокручивать каталоги, выбирать каталог, а затем дважды проверять, чтобы убедиться, что пользователь доволен тем, что произойдет?
В том же духе, есть ли средство, с помощью которого можно было бы предложить исключить какой-либо тип файла, иначе он ничего не исключает?
Продолжаем, как насчет remove_emptyfolders
, иначе предположим Истинный
?
(Вопрос 1 — самый важный. Я не ожидаю, что вы решите всю проблему для остальных, если не будете честолюбивы!)
#!/usr/bin/env python3
импорт ОС
подпроцесс импорта
импортный шутил
# --------------------------------------------- -------
reorg_dir = "/path/to/directory_to_reorganize"
exclude = ("".jpg") # например
remove_emptyfolders = Истина
# --------------------------------------------- --------
# МОИ ТЕКУЩИЕ ПРАВКИ ---------------------------------------
пока верно:
dirReorg= input("Какой каталог вы хотите организовать по типу файла?")
если не os.path.exists(dirReorg):
print("Такого пути не существует. Попробуйте еще раз!")
Продолжить
сломать
reorg_dir = os.path.abspath(dirReorg)
# конец МОИХ ТЕКУЩИХ ПРАВОК ---------------------------------------------
для корня, каталогов, файлов в os.walk(reorg_dir):
для имени в файлах:
тема = корень+"/"+имя
если name.startswith("."):
расширение = ".hidden_files"
Элиф не "." по названию:
расширение = ".без_расширения"
еще:
расширение = имя[имя.rfind("."):]
если не расширение в исключении:
new_dir = reorg_dir+"/"+расширение[1:]
если не os.path.exists(new_dir):
os.mkdir(новый_каталог)
Shutil.move(тема, new_dir+"/"+имя)
защита очистки():
список файлов = []
для корня, каталогов, файлов в os.walk(reorg_dir):
для имени в файлах:
filelist.append(root+"/"+имя)
directorys = [item[0] для элемента в os.walk(reorg_dir)]
для др в каталогах:
соответствует = [элемент для элемента в списке файлов, если др в элементе]
если len(совпадает) == 0:
пытаться:
шутил.rmtree (д-р)
кроме FileNotFoundError:
проходят
если remove_emptyfolders == True:
очистка()