Форум сайта python.su
У многих на рабочем столе есть папка, которая называется как-то “Разобрать”. Как правило, разобрать эту папку руки никогда так и не доходят.
Мы с вами напишем скрипт, который разберет эту папку. В конце концов, вы сможете настроить эту программу под себя и она будет выполнять индивидуальный сценарий, отвечающий вашим потребностям. Для этого наше приложение будет проверять расширение файла (последние символы имени файла, как правило, после точки) и, в зависимости от расширения, принимать решения, к какой категории отнести этот файл.
Скрипт принимает один аргумент при запуске – это имя папки, в которой он будет производить сортировку. Допустим файл с программой называется sort.py, тогда, чтобы отсортировать папку /user/Desktop/Матлох, нужно запустить скрипт командой python sort.py /user/Desktop/Матлох
Чтобы успешно справиться с этой задачей, вы должны вынести логику обработки папки в отдельную функцию.
Чтобы скрипт мог пройти на любую глубину вложенности, функция обработки папок должна рекурсивно вызывать сама себя, когда встречаются вложенные папки.
Скрипт должен проходить по указанной при вызове папке и сортировать все файлы по группам:
изображения ('JPEG', ‘PNG’, ‘JPG’, ‘SVG’);
видео файлы ('AVI', ‘MP4’, ‘MOV’, ‘MKV’);
документы ('DOC', ‘DOCX’, ‘TXT’, ‘PDF’, ‘XLSX’, ‘PPTX’);
музыка ('MP3', ‘OGG’, ‘WAV’, ‘AMR’);
архивы ('ZIP', ‘GZ’, ‘TAR’);
неизвестные расширения.
Вы можете расширить и дополнить этот список, если хотите.
В результатах работы должны быть:
Список файлов в каждой категории (музыка, видео, фото и др.)
Список всех известных скрипта расширений, которые встречаются в целевой папке.
Список всех расширений, которые скрипту неизвестны.
После этого необходимо добавить функции, которые будут отвечать за обработку каждого типа файлов.
файлы, расширение которых неизвестно, остаются без изменения.
import os main_path = r'C:\Users\prime\PycharmProjects\Мотлох' # os.mkdir(main_path + '\\Мотлох') extensions = { 'video': ['mp4', 'mov', 'avi', 'mkv', 'wmv', '3gp', '3g2', 'mpg', 'mpeg', 'm4v', 'h264', 'flv', 'rm', 'swf', 'vob'], 'data': ['sql', 'sqlite', 'sqlite3', 'csv', 'dat', 'db', 'log', 'mdb', 'sav', 'tar', 'xml'], 'audio': ['mp3', 'wav', 'ogg', 'flac', 'aif', 'mid', 'midi', 'mpa', 'wma', 'wpl', 'cda'], 'images': ['jpg', 'png', 'bmp', 'ai', 'psd', 'ico', 'jpeg', 'ps', 'svg', 'tif', 'tiff'], 'archives': ['zip', 'rar', '7z', 'z', 'gz', 'rpm', 'arj', 'pkg', 'deb'], 'documents': ['pdf', 'txt', 'doc', 'docx', 'rtf', 'tex', 'wpd', 'odt'], '3d': ['stl', 'obj', 'fbx', 'dae', '3ds', 'iges', 'step'], 'presentation': ['pptx', 'ppt', 'pps', 'key', 'odp'], 'spreadsheet': ['xlsx', 'xls', 'xlsm', 'ods'], 'font': ['otf', 'ttf', 'fon', 'fnt'], 'gif': ['gif'], 'exe': ['exe'], 'bat': ['bat'], 'apk': ['apk'] } def create_folders_from_list(folder_path, folder_names): for folder in folder_names: if not os.path.exists(f'{folder_path}\\{folder}'): os.mkdir(f'{folder_path}\\{folder}') def get_subfolder_paths(folder_path) -> list: subfolder_paths = [f.path for f in os.scandir(folder_path) if f.is_dir()] return subfolder_paths def get_subfolder_names(folder_path) -> list: subfolder_paths = get_subfolder_paths(folder_path) subfolder_names = [f.split('\\')[-1] for f in subfolder_paths] return subfolder_names def get_file_paths(folder_path) -> list: file_paths = [f.path for f in os.scandir(folder_path) if not f.is_dir()] return file_paths def get_file_names(folder_path) -> list: file_paths = [f.path for f in os.scandir(folder_path) if not f.is_dir()] file_names = [f.split('\\')[-1] for f in file_paths] return file_names def sort_files(folder_path): file_paths = get_file_paths(folder_path) ext_list = list(extensions.items()) for file_path in file_paths: extension = file_path.split('.')[-1] file_name = file_path.split('\\')[-1] for dict_key_int in range(len(ext_list)): if extension in ext_list[dict_key_int][1]: print(f'Moving {file_name} in {ext_list[dict_key_int][0]} folder\n') os.rename(file_path, f'{main_path}\\{ext_list[dict_key_int][0]}\\{file_name}') def remove_empty_folders(folder_path): subfolder_paths = get_subfolder_paths(folder_path) for p in subfolder_paths: if not os.listdir(p): print('Deleting empty folder:', p.split('\\')[-1], '\n') os.rmdir(p) if __name__ == "main": create_folders_from_list(main_path, extensions) sort_files(main_path)
Отредактировано Alduin (Янв. 18, 2023 02:23:47)
Офлайн