Move History

Rooted by: Move Image Files
Fork Selected
  • Debugging
    Image Processing
    Description

    Through experience I found that hardcoding in file names/ destinations/ quantities, etc. always lead to unknown bugs later on.

    So I would really prefer having the folder source and destination as a variable/parameter.

    Code
    import os, shutil
    
    class MoveFiles:
        def __init__(self):
            self.imageFolder = "folderA"
            self.images = [img for img in os.listdir(self.imageFolder) if img.endswith(('.png', '.jpg', '.jpeg'))]
    
        def move_image_files(self, source = "folderA", destination = "folderB"):
            for img in self.images:
                shutil.move(os.path.join(source, img), os.path.join(destination, img))
    
    Preloaded Code
    from PIL import Image, ImageDraw
    import os
    
    def create_image_files():
        """Create 3 .PNG, 3 .JPG, and 1 image test files"""
        if not os.path.exists('folderA'):
            os.mkdir('folderA')
        if not os.path.exists('folderB'):
            os.mkdir('folderB')
        for n in range(1, 3 + 1):
            png_img = Image.new('RGB', size=(76, 33), color=(177, 54, 30))
            t = ImageDraw.Draw(png_img)
            t.text((6, 10), f'codewarz-{n}', fill=(0, 0, 0))
            png_img.save(os.path.join('folderA', f'codewarz-{n}.png'))
        for n in range(1, 3 + 1):
            jpg_img = Image.new('RGB', size=(76, 33), color=(177, 54, 30))
            t = ImageDraw.Draw(jpg_img)
            t.text((6, 10), f'codewarz-{n}', fill=(0, 0, 0))
            jpg_img.save(os.path.join('folderA', f'codewarz-{n}.jpg'))
        jpeg_img = Image.new('RGB', size=(100, 52), color=(177, 54, 30))
        t = ImageDraw.Draw(jpeg_img)
        t.text((10, 20), f'codewarz-776', fill=(0, 0, 0))
        jpeg_img.save(os.path.join('folderA', f'codewarz-776.jpeg'))
    
    
    def create_text_files():
        """This function generates 5 text files"""
        for n in range(1, 5 + 1):
            with open(os.path.join('folderA', f'codewarz-{n}.txt'), 'w') as fo:
                fo.write('codewarz!')
    
    
                
    def delete_test_files():
        """This function deletes test files in folderA and folderB"""
        for file in os.listdir('folderA'):
            os.remove(os.path.join('folderA', file))
        for file in os.listdir('folderB'):
            os.remove(os.path.join('folderB', file))
        os.rmdir('folderB')    
                
            
    create_image_files()
    create_text_files()
    Test Cases
    import codewars_test as test
    from solution import MoveFiles, delete_test_files
    import os
    
    
    @test.describe("Example")
    def test_group():
        @test.it("test case 1: File quantity")
        def test_case():
            MoveFiles().move_image_files()
            t1 = len(os.listdir('folderA'))
            t2 = len(os.listdir('folderB'))           
            test.assert_equals(t1, 5)
            test.assert_equals(t2, 7)
            
        @test.it("test case 2: Check file type")
        def test_case():
            MoveFiles().move_image_files()
            t1 = len([img for img in os.listdir('folderA') if img.endswith(('.png', '.jpg', '.jpeg'))])       
            t2 = len([img for img in os.listdir('folderB') if img.endswith(('.png', '.jpg', '.jpeg'))])
            t3 = len([img for img in os.listdir('folderA') if img.endswith('.txt')])
            t4 = len([img for img in os.listdir('folderB') if img.endswith('.txt')])
            test.assert_equals(t1, 0)
            test.assert_equals(t2, 7)
            test.assert_equals(t3, 5)
            test.assert_equals(t4, 0)     
            
        delete_test_files()
        
  • Code
    • import os, shutil
    • class MoveFiles:
    • def __init__(self):
    • self.images = [img for img in os.listdir('folderA') if img.endswith(('.png', '.jpg', '.jpeg'))]
    • def __init__(self):
    • self.imageFolder = "folderA"
    • self.images = [img for img in os.listdir(self.imageFolder) if img.endswith(('.png', '.jpg', '.jpeg'))]
    • def move_image_files(self):
    • def move_image_files(self, source = "folderA", destination = "folderB"):
    • for img in self.images:
    • shutil.move(os.path.join('folderA', img), os.path.join('folderB', img))
    • shutil.move(os.path.join(source, img), os.path.join(destination, img))