Skip to content

Instantly share code, notes, and snippets.

@silviaclaire
Last active November 12, 2020 09:45
Show Gist options
  • Save silviaclaire/f77b6c35492f2f77a2c27e3ad7196d99 to your computer and use it in GitHub Desktop.
Save silviaclaire/f77b6c35492f2f77a2c27e3ad7196d99 to your computer and use it in GitHub Desktop.
file_organizer.py
import os
import re
import shutil
ROOT_DIR = "./"
# “数字_”以外的自定义文件夹写这里
CUSTOM_READ_DIR = [
"custom_folder_1",
"custom_folder_2",
]
class SubFolder:
TXT = 'txt'
BAR = 'bar'
NO_BAR = 'no-bar'
def move_file(src_filepath, dest_dir, sub_folder):
filename = os.path.basename(src_filepath)
dest_folderpath = os.path.join(dest_dir, sub_folder)
dest_filepath = os.path.join(dest_folderpath, filename)
os.makedirs(dest_folderpath, exist_ok=True)
shutil.move(src_filepath, dest_filepath)
print('move done: %s to %s' % (filename, dest_filepath))
for src_dir in os.listdir(ROOT_DIR):
src_folder_name = os.path.basename(src_dir)
# src_dir: %d_* or custom folders
if re.match(r"^\d+_", src_folder_name) or src_folder_name in CUSTOM_READ_DIR:
# dest_dir: %d_*/dest
dest_dir = os.path.join(src_dir, 'dest')
# if dest already exists
if os.path.exists(dest_dir):
print(f'{dest_dir} already exists')
exit(-1)
for root, dirs, files in os.walk(src_dir):
for filename in files:
name, ext = os.path.splitext(filename)
filepath = os.path.join(root, filename)
if ext.lower() == '.jpg':
if 'Exp' in name:
move_file(filepath, dest_dir, SubFolder.BAR)
else:
move_file(filepath, dest_dir, SubFolder.NO_BAR)
elif ext.lower() == '.txt':
move_file(filepath, dest_dir, SubFolder.TXT)
else:
print('skipped: %s' % filename)
else:
print('skipped: %s' % src_folder_name)
print('done')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment