-
-
Save advishnuprasad/8a5cb9716540c2ec21b58e0f7fcf9c52 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 = 1000 # 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:03f}'.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