Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 18, 2023 02:22:16

Alduin
Зарегистрирован: 2023-01-10
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

Скрипт, который разбирает эту папку

У многих на рабочем столе есть папка, которая называется как-то “Разобрать”. Как правило, разобрать эту папку руки никогда так и не доходят.

Мы с вами напишем скрипт, который разберет эту папку. В конце концов, вы сможете настроить эту программу под себя и она будет выполнять индивидуальный сценарий, отвечающий вашим потребностям. Для этого наше приложение будет проверять расширение файла (последние символы имени файла, как правило, после точки) и, в зависимости от расширения, принимать решения, к какой категории отнести этот файл.

Скрипт принимает один аргумент при запуске – это имя папки, в которой он будет производить сортировку. Допустим файл с программой называется 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)


Нужна помощь! Посдкажите логику где тут сделать данную функцию и где указать ее обработку

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

Функция normalize:

Проводит транслитерацию кириллического алфавита на латинский.
Заменяет все символы, кроме латинских букв, цифр на ‘_’.
Требования к функции normalize:

принимает на вход строчку и возвращает строчку;
проводит транслитерацию кириллических символов на латиницу;
заменяет все символы, кроме букв латинского алфавита и цифр, символом ‘_’;
транслитерация может не соответствовать стандарту, но быть читабельной;
заглавные буквы остаются прописными, а маленькие — строчными после транслитерации.

Отредактировано Alduin (Янв. 18, 2023 02:23:47)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version