Reputation: 23
Want to automatize the sorting process. But can't work it out. Have about thousand files with the same extension in the same folder. Want to sort them to different folders like: XXpattern1XX.XXX file to [pattern1]folder, Xpattern2XXX.XXX file to [pattern2]folder, pattern3XXXX.XXX file to [pattern3]folder and so on.
Have a script from SO but can't find the original post. But could not figure it out how to change it yet.
#!/usr/bin/env python3
import os
import subprocess
import shutil
# --------------------------------------------------------
reorg_dir = "/path/to/directory_to_reorganize"
exclude = (".jpg") # for example
remove_emptyfolders = True
# ---------------------------------------------------------
for root, dirs, files in os.walk(reorg_dir):
for name in files:
subject = root+"/"+name
if name.startswith("."):
extension = ".hidden_files"
elif not "." in name:
extension = ".without_extension"
else:
extension = name[name.rfind("."):]
if not extension in exclude:
new_dir = reorg_dir+"/"+extension[1:]
if not os.path.exists(new_dir):
os.mkdir(new_dir)
n = 1; name_orig = name
while os.path.exists(new_dir+"/"+name):
name = "duplicate_"+str(n)+"_"+name_orig
n = n+1
newfile = new_dir+"/"+name
shutil.move(subject, newfile)
def cleanup():
filelist = []
for root, dirs, files in os.walk(reorg_dir):
for name in files:
filelist.append(root+"/"+name)
directories = [item[0] for item in os.walk(reorg_dir)]
for dr in directories:
matches = [item for item in filelist if dr in item]
if len(matches) == 0:
try:
shutil.rmtree(dr)
except FileNotFoundError:
pass
if remove_emptyfolders == True:
cleanup()
thnx
Upvotes: 0
Views: 1009
Reputation: 369
You can try something like:
patterns = ['pattern1', 'pattern2', ...]
folders = [os.path.join(main_directory, pattern) for pattern in patterns]
# build folders
for folder in folders:
if not os.path.exists(folder):
os.makedirs(folder)
# move files in corresponding folders
for file in files: # files is the list of all your file paths
for pattern, folder in zip(patterns, folders):
file_name = os.path.basename(file)
if pattern in file_name:
os.rename(file, os.path.join(folder, file_name))
Upvotes: 2