Pythonでファイルを並べ替える

ストッシュ。ほとんどの場合、ダウンロードフォルダー内の多くは、さまざまなインストーラー、アーカイブ、その他のファイルを収集していました。そして今、あなたがこの排泄物の山からファイルを見つける必要がある時が来ます。だから私は、Pythonでファイル拡張子ソーターのスクリプトを書いてみませんか?





コードを書く

まず、オペレーティングシステムで動作するように標準のosモジュールインポートしましょうこのモジュールを使用して、フォルダーを作成し、ファイルを移動します。





import os
      
      



, . backslash, Python . 2 , r, .





main_path = 'd:\\down'
# main_path = r'd:\down
      
      



, os.mkdir()





os.mkdir(main_path + '\\aboba')
      
      



. os.path.exists().





# also creates folders from dictionary keys
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}')
      
      



extensions. - . - .





# key names will be folder names!
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'],

    'image': ['jpg', 'png', 'bmp', 'ai', 'psd', 'ico', 'jpeg', 'ps', 'svg', 'tif', 
              'tiff'],

    'archive': ['zip', 'rar', '7z', 'z', 'gz', 'rpm', 'arj', 'pkg', 'deb'],

    'text': ['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']
}
      
      



create_folders_from_list() . .





. os.scandir() , .





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
      
      



, get_subfolder_paths() not.





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
      
      



. file_paths. ext_list extensions.items(). - , - , - , .





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}')
      
      



os.rename(" ", " ")





:

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}')
      
      



- . . . . , os.listdir("folder_path") . , os.rmdir("folder_path")





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)
      
      



import os

main_path = 'd:\\down'

# key names will be folder names!
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'],

    'image': ['jpg', 'png', 'bmp', 'ai', 'psd', 'ico', 'jpeg', 'ps', 'svg', 'tif', 'tiff'],

    'archive': ['zip', 'rar', '7z', 'z', 'gz', 'rpm', 'arj', 'pkg', 'deb'],

    'text': ['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']
}


# also creates folders from dictionary keys
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_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 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)
    remove_empty_folders(main_path)
      
      



, , . - extensions.





. YouTube , , , , mkv mp4 (premiere mkv) .





.





main_folder = 'f:\\shtosh python\\new video'

# key names will be folder names!
extensions = {

    'img': ['jpg', 'png', 'bmp', 'gif', 'ico', 'jpeg'],

    'audio': ['mp3', 'wav'],

    'footage': ['mp4', 'mov', 'avi'],

    'mkv': ['mkv'],

    'prj': []
}
      
      



このアプローチでは、編集用のファイルを1つのフォルダーに入れてから、スクリプトを実行して、すべてをプレミアプロに簡単にインポートできます。





結論

ストッシュ。コードはGitHubにあります。それを取り、あなた自身のためにそれを変えて、あなたの健康にそれを使ってください。フィードバックをいただければ幸いです。






UPD。コメント内のコメント(すべてではない)を考慮して、プログラムを変更しました。私は記事を書き直しませんでした、私はあまりにも怠惰です。








All Articles