Recursively place file in a directory/all subdirectories - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: General (https://python-forum.io/forum-1.html) +--- Forum: Code sharing (https://python-forum.io/forum-5.html) +--- Thread: Recursively place file in a directory/all subdirectories (/thread-14941.html) |
Recursively place file in a directory/all subdirectories - rootVIII - Dec-26-2018 Having some fun with recursion. This one places a file in the specified directory as well as its subdirectories and their subdirectories etc. In other words don't specify the file path to be '/'. hahahaha.... unless you write the code to undo it #! /usr/bin/python3 from os.path import isdir, basename from os import listdir, system, getcwd, chdir import sys # recursively create a file in all subdirectories of a given # directory.. all dirs/subdirs should have different names def get_diff(available, removal): difference = [] s1 = set() s2 = set() s1.update(available) s2.update(removal) for i in s1.difference(s2): difference.append(i) return difference def create(finished_folders): chdir("/home/absolute/path/to/directory") current_dir = basename(getcwd()) available_dirs = listdir(".") removal_list = [] for d in available_dirs: if d in finished_folders or not isdir(d): removal_list.append(d) available_dirs = get_diff(available_dirs, removal_list) if current_dir not in finished_folders: while len(available_dirs) > 0: next_dir = available_dirs.pop() if next_dir not in finished_folders and isdir(next_dir): chdir(next_dir) available_dirs = listdir(".") for directory in available_dirs: if directory in finished_folders or not isdir(directory): removal_list.append(directory) available_dirs = get_diff(available_dirs, removal_list) system("touch test.txt") finished_folders += [basename(getcwd())] create(finished_folders) else: print("FINISHED") sys.exit() if __name__ == "__main__": folders = [] create(folders) RE: Recursively place file in a directory/all subdirectories - Gribouillis - Dec-26-2018 Is this code for the obfuscated python contest? If you want to add an empty 'test.txt' file in every subfolder of a hierarchy, you can do it with os.walk() . Why use such a complicated function? Even get_diff() can be shorteneddef get_diff(available, removal): s = set(removal) return [x for x in available if x not in s]Do you know one can 'touch' without a subprocess? There is a pathlib.Path.touch() method that does just that!
RE: Recursively place file in a directory/all subdirectories - rootVIII - Dec-26-2018 hell yeah looking at pathlib.Path.touch() right now... awesome Actually I was specifically trying to do it without os.walk().... |