I have a folder containing thousands of files and directories. I would like to move all the files that are not contained in a sub directory into a directory and name it the file name, while leaving the files already inside of directories alone, ie:
create 'newdir' ; move 123.mp4 ; into 'newdir' ; change name 'newdir' to '123' ; repeat .
In response to the mentioned question, I posted an answer with the following script.
#%%
import os
# %%
source = "/Users/me/Desktop/folder" # notice the missing last "/"
filenames = next(os.walk(source))[2]
filenames = [ x for x in filenames if not ".DS_Store" in x]
#%%
dirpaths = [os.path.splitext(file)[0] for file in filenames]
# %%
def making(directory,source=source):
directory = os.path.join(source,directory+"/")
os.makedirs(directory)
a = [making(directory) for directory in dirpaths] #list comprehension could be faster than loops.
# %%
def movingfiles(onefile, source=source):
os.rename(source + "/" + onefile, source + "/" + os.path.splitext(onefile)[0] + "/" + onefile )
b = [movingfiles(onefile) for onefile in filenames] #useless list again.
I want to know whether list comprehensions are better the way I used them. Also, I know that I can avoid the directory list and making a lot of empty directories at once by putting them in one function (and make "the" directory on the spot), but can anything else be improved? For e.g., I had to put a note to avoid putting / in source. Also, is this way of using lists to perform a function actually helpful?