-
-
Save atindra50/9aa255129550b839513d8569fab54297 to your computer and use it in GitHub Desktop.
Split a folder with many files into subfolders with N files. Usage: python folder_splitter.py path/to/target/folder
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
# @author: Peter Lamut | |
import argparse | |
import os | |
import shutil | |
N = 10 # the number of files in seach subfolder folder | |
def move_files(abs_dirname): | |
"""Move files into subdirectories.""" | |
files = [os.path.join(abs_dirname, f) for f in os.listdir(abs_dirname)] | |
i = 0 | |
curr_subdir = None | |
for f in files: | |
# create new subdir if necessary | |
if i % N == 0: | |
subdir_name = os.path.join(abs_dirname, '{0:03d}'.format(i / N + 1)) | |
os.mkdir(subdir_name) | |
curr_subdir = subdir_name | |
# move file to current dir | |
f_base = os.path.basename(f) | |
shutil.move(f, os.path.join(subdir_name, f_base)) | |
i += 1 | |
def parse_args(): | |
"""Parse command line arguments passed to script invocation.""" | |
parser = argparse.ArgumentParser( | |
description='Split files into multiple subfolders.') | |
parser.add_argument('src_dir', help='source directory') | |
return parser.parse_args() | |
def main(): | |
"""Module's main entry point (zopectl.command).""" | |
args = parse_args() | |
src_dir = args.src_dir | |
if not os.path.exists(src_dir): | |
raise Exception('Directory does not exist ({0}).'.format(src_dir)) | |
move_files(os.path.abspath(src_dir)) | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment