반응형

계층의 개수에 따라 for 문을 추가하면 되는 코드입니다.

import glob, os, natsort, cv2

root = "some_path"
file_list = []

for img_folder in natsort.natsorted(glob.glob(os.path.join(root, '*'))):
    folder_name = img_folder.split('/')[-1]
    for img_file in natsort.natsorted(glob.glob(os.path.join(img_folder, '*'))):
    	filename = img_file.split('/')[-1]
        file_list.append(img_file)
        img = cv2.imread(img_file)
        
        

뎁스가 두 계층 있는 데이터 셋을 건든다고 가정해봅시다. 즉 아래와 같은 계층입니다.

root
  |
  -----class
  |       |
  |        -----file
  -----class
          |
           -----file

여기서 주목해야할 것은 glob.glob, os.path.join, natsort입니다.

glob.glob(path) -> list

os.path.join(separate_path) -> str

natsort.natsorted(list) -> list

natsort.natsorted는 sort.sorted와 비슷한 기능을 하지만 폴더가 숫자로 되어 있는경우 ex) 1, 2, 3, 4 ~ 100, 101~

sort.sorted는 1, 100 이런식으로 정렬하게 됩니다. 이때 해결방법은 앞에 0001, 0002 이런식으로 0을 붙여주거나 하는 것인데, natsort는 그럴 필요 없이 정렬해 줍니다.

 

 

 

반응형

+ Recent posts