Stosh. Très probablement, beaucoup dans le dossier des téléchargements ont rassemblé un tas de programmes d'installation, d'archives et d'autres fichiers différents. Et maintenant vient le moment où vous devez trouver un fichier dans ce tas d'excréments. Alors j'ai pensé, pourquoi ne pas écrire un script pour le trieur d'extensions de fichiers en Python ?
Écriture du code
Tout d'abord, importons le module os standard pour qu'il fonctionne avec le système d'exploitation. Avec ce module, nous allons créer des dossiers et déplacer des fichiers.
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': []
}
Avec cette approche, je peux mettre tous les fichiers à éditer dans un dossier, puis exécuter le script et importer facilement le tout dans Premiere pro.
Conclusion
Stosh. Le code est sur GitHub. Prenez-le, changez-le pour vous-même, utilisez-le pour votre santé. Je serais heureux de recevoir des commentaires.
UPD. Modification du programme en prenant en compte (pas tous) les commentaires dans les commentaires. Je n'ai pas réécrit l'article, je suis trop paresseux.