I want to copy images from multi subfolders into only one folder using python or any library that can do with python framework my folders as described in tree below
$ tree
.
├── main_folder
│ ├── Subfolder_1
│ │ └── Subfolder1_1
│ │ └── ├── 0.png
│ │ ├── 1.png
│ │ ├── 2.png
│ │ └── 3.png
│ │ └── Subfolder1_2
│ │ └── ├── 4.png
│ │ ├── 5.png
│ │ ├── 6.png
│ │ └── 7.png
.....
│ ├── Subfolder_2
│ │ └── Subfolder2_1
│ │ └── |____.png
│ │ ├── 8.png
│ │ └── 9.png
│ │ └── Subfolder2_2
│ │ └── ├── 10.png
│ │ ├── 11.png
│ │ ├── 12.png
│ │ └── 13.png
│ └── Subfolder_3
│ └── Subfolder3_1
│ └── |___ .png
│ ├── 14.png
│ ├── 15.png
│ ├── 16.png
│ │ └── Subfolder3_2
│ │ └── ├── 17.png
│ │ ├── 18.png
│ │ ├── 19.png
│ │ └── 20.png
│
└── script.py
The expected results destination_folder will look like the tree below
── destination_folder
├── 0.png
├── 1.png
├── 2.png
└── 3.png
.........
├── n-1.png
└── n.png
just use a mixture of glob for finding files and shutil for copying files.
import glob
import os
import shutil
dest_folder = 'destination_folder'
if not os.path.isdir(dest_folder):
os.mkdir(dest_folder)
for item in glob.glob('**/*.png',recursive=True):
filename = os.path.basename(item)
full_path = os.path.abspath(item)
shutil.copy(full_path, os.path.join(dest_folder,filename))
if you only want pictures with numbers you can add an if condition to it
for item in glob.glob('**/*.png',recursive=True):
filename = os.path.basename(item)
if filename.split('.')[0].isdigit():
full_path = os.path.abspath(item)
shutil.copy(full_path,os.path.join(dest_folder,filename))