simpanan. Kemungkinan besar, banyak di folder unduhan mengumpulkan banyak penginstal, arsip, dan file lain yang berbeda. Dan sekarang saatnya tiba ketika Anda perlu menemukan file dari tumpukan kotoran ini. Jadi saya pikir, mengapa tidak menulis skrip untuk penyortir ekstensi file dengan Python?
Menulis kode
Pertama, mari impor modul os standar untuk bekerja dengan sistem operasi. Dengan modul ini kita akan membuat folder dan memindahkan file.
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': []
}
Dengan pendekatan ini, saya dapat meletakkan file apa pun untuk diedit dalam satu folder, lalu menjalankan skrip dan dengan mudah mengimpor semuanya ke premiere pro.
Kesimpulan
simpanan. Kodenya ada di GitHub. Ambil, ubah untuk diri sendiri, gunakan untuk kesehatan Anda. Saya akan senang menerima umpan balik.
UPD. Memodifikasi program, dengan mempertimbangkan (tidak semua) komentar di komentar. Saya tidak menulis ulang artikel itu, saya terlalu malas.