I wrote a code which moves the files which has a substring in them.
import os
import shutil
def move():
path = os.getcwd()
shutil.rmtree('Animals')
firstfolder = 'Animals'
if not os.path.isdir(firstfolder):
os.mkdir('Animals')
for file in os.listdir():
Buffalo = '1837'
donkey = '6104'
Chimpanzee = '9731'
cat = '2905'
rat = '6648'
sheep = '3128'
lizard = '3053'
insect = '2681'
dog = '3901'
#Buffalo
if Buffalo in file:
secondfolder = 'Animals/Buffalo'
thirdfolder = 'Animals/Buffalo/testfolder'
if not os.path.isdir(secondfolder):
os.mkdir(secondfolder)
if not os.path.isdir(thirdfolder):
os.mkdir(thirdfolder)
shutil.move(file, thirdfolder)
#donkey
if donkey in file:
secondfolder = 'Animals/donkey'
thirdfolder = 'Animals/donkey/testfolder'
if not os.path.isdir(secondfolder):
os.mkdir(secondfolder)
if not os.path.isdir(thirdfolder):
os.mkdir(thirdfolder)
shutil.move(file, thirdfolder)
#Chimpanzee
if Chimpanzee in file:
secondfolder = 'Animals/Chimpanzee'
thirdfolder = 'Animals/Chimpanzee/testfolder'
if not os.path.isdir(secondfolder):
os.mkdir(secondfolder)
if not os.path.isdir(thirdfolder):
os.mkdir(thirdfolder)
shutil.move(file, thirdfolder)
#cat
if cat in file:
secondfolder = 'Animals/cat'
thirdfolder = 'Animals/cat/testfolder'
if not os.path.isdir(secondfolder):
os.mkdir(secondfolder)
if not os.path.isdir(thirdfolder):
os.mkdir(thirdfolder)
shutil.move(file, thirdfolder)
#rat
if rat in file:
secondfolder = 'Animals/rat'
thirdfolder = 'Animals/rat/testfolder'
if not os.path.isdir(secondfolder):
os.mkdir(secondfolder)
if not os.path.isdir(thirdfolder):
os.mkdir(thirdfolder)
shutil.move(file, thirdfolder)
#sheep
if sheep in file:
secondfolder = 'Animals/sheep'
thirdfolder = 'Animals/sheep/testfolder'
if not os.path.isdir(secondfolder):
os.mkdir(secondfolder)
if not os.path.isdir(thirdfolder):
os.mkdir(thirdfolder)
shutil.move(file, thirdfolder)
#lizard
if lizard in file:
secondfolder = 'Animals/lizard'
thirdfolder = 'Animals/lizard/testfolder'
if not os.path.isdir(secondfolder):
os.mkdir(secondfolder)
if not os.path.isdir(thirdfolder):
os.mkdir(thirdfolder)
shutil.move(file, thirdfolder)
#insect
if insect in file:
secondfolder = 'Animals/insect'
thirdfolder = 'Animals/insect/testfolder'
if not os.path.isdir(secondfolder):
os.mkdir(secondfolder)
if not os.path.isdir(thirdfolder):
os.mkdir(thirdfolder)
shutil.move(file, thirdfolder)
#dog
if dog in file:
secondfolder = 'Animals/dog'
thirdfolder = 'Animals/dog/testfolder'
if not os.path.isdir(secondfolder):
os.mkdir(secondfolder)
if not os.path.isdir(thirdfolder):
os.mkdir(thirdfolder)
shutil.move(file, thirdfolder)
move()
In my Current Working Directory, i have these files: 1):- 2905r20.wav 2):- 5fm2905.wav 3):- nso2905.wav 4):-1sny2905wn3i56.wav
When i Run the Code, it is only moving the last file which is 1sny2905wn3i56.wav. It is Not Moving all the files which has 2905 in them. It Should move all 4 files. but i don't know why it is only moving last file. When I Run the Code again after moving the last file, it is moving 3rd file and deleting 4th file which was moved. And When i run the code again, it is deleting 3rd file and moving 2nd file and so on...
how to fix that ??
import os
import shutil
def move():
path = os.getcwd()
shutil.rmtree('Animals')
firstfolder = 'Animals'
if not os.path.isdir(firstfolder):
os.mkdir('Animals')
# Collect files to move
files_to_move = []
for file in os.listdir():
if '2905' in file: # Modify this condition as per your needs
files_to_move.append(file)
# Move collected files to their respective folders
for file in files_to_move:
if '2905' in file: # Modify this condition as per your needs
animal_name = file.split('2905')[0] # Extract animal name dynamically
secondfolder = f'Animals/{animal_name}'
thirdfolder = f'Animals/{animal_name}/testfolder'
if not os.path.isdir(secondfolder):
os.makedirs(secondfolder) # Use makedirs to create parent directories if needed
if not os.path.isdir(thirdfolder):
os.makedirs(thirdfolder) # Use makedirs to create parent directories if needed
shutil.move(file, thirdfolder)
move()
By Simply Iterating over os.listdir()
, the problem is solved.
use os.makedirs()
instead of os.mkdir()
to create multiple directories.
This prevents issues where shutil.move()
fails due to missing directories.
Adjust the conditions ('2905' in file and folder) as per your actual requirements.