-1

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 ??

1 Answers1

0

Edit :
You can considerably optimize your code like below.
Note the use os.path (it's more portable, smart and clear) :

animals = {}
animals["Buffalo"] = '1837'
animals["donkey"] = '6104'
animals["Chimpanzee"] = '9731'
animals["cat"] = '2905'
animals["rat"] = '6648'
animals["sheep"] = '3128'
animals["lizard"] = '3053'
animals["insect"] = '2681'
animals["dog"] = '3901'

wd_path = os.getcwd()
animals_path = os.path.join(wd_path, "Animals")
if not os.path.isdir(firstfolder):
    os.mkdir('Animals')

for file in os.listdir(animals_path):
    file_path = os.path.join(animals_path, file)

    for animal, id in animals.items():
        if id in file_path:
            secondfolder = os.path.join(animals_path, animal)
            thirdfolder = os.path.join(secondfolder, "testfolder")
            if not os.path.isdir(secondfolder):
                os.mkdir(secondfolder)
            if not os.path.isdir(thirdfolder):
                os.mkdir(thirdfolder)
            shutil.copy(file_path, thirdfolder)
Nicos44k
  • 88
  • 7