2017-11-07 10 views
0

많은 하위 폴더가있는 루트 디렉토리가 있으며 각각 이미지가 있습니다. 모든 배열을 배열에로드하고 각 이미지의 하위 폴더 이름을 지정하려고합니다. 이제는 모든 이미지를 모양의 배열에로드하는 방법을 알고 있습니다. (10 000, 512, 512, 3), 즉 10 000 크기의 이미지는 512x512이고 3 채널입니다. 하위 폴더 이름을 할당 한 후에 유사한 배열을 갖고 싶지만 하위 폴더가있는 10 000 개의 이미지 각각에 대해 말할 수 있습니다.배열의 해당 이미지에 하위 폴더의 이름을 지정하십시오.

os.walk을 사용하려고합니다. 모든 하위 폴더 이름과 이미지 이름에 액세스하는 방법을 알고 있지만 한 가지 배열로 묶는 방법을 알 수는 없습니다. 배열 클래스/하위 폴더의 모든 하위 폴더 이름의 문자열, 그러나 단지 숫자를 (포함되지 않은 경우는이로드하는 동안 할 수 있으면

import os 
from scipy.misc import imread 

images = [] 
for root, dirs, files in os.walk('.'): 
    for name in dirs: 
     print(name) 

    for file in files: 
     img = imread(os.path.join(root, file), mode='RGB') 
     if img is not None: 
      images.append(img) 

(또한 그것은. 잘 모르겠어요) 좋은 것 프로세스가 완료되었거나 모든 이미지가로드 된 후 완료됩니다.)

+0

이미지에 하위 폴더 이름을 지정하면 무엇을 의미합니까? 하위 구조의 이미지 사이에 관계를 저장하는 데이터 구조를 원하십니까? 그렇다면 하위 폴더 이름이 키이고 값 목록으로 이미지 목록이있는 사전이 가장 좋습니다. –

+1

그게 아마도 내가 원하는거야. 질문을 업데이트하여 달성하고자하는 것이 무엇인지 명확하게했습니다. @범죄자-- –

답변

0

어때? 여기

import glob 
import os 
from scipy.misc import imread 

images = {} 

for file in glob.glob("./**/*.png", recursive=True): 
    cwd = os.path.basename(os.path.dirname(file)) 
    img = imread(os.path.abspath(file), mode='RGB') 
    if img is not None: 
     if cwd not in images.keys(): 
      images[cwd] = {} 
      images[cwd][file] = img 
     else: 
      images[cwd][file] = img 

for key in images.keys(): 
    print("{:10s}{}".format(key, list(images[key].keys()))) 

는 예를 들어 디렉토리 구조입니다 :

. 
├── f_one 
│   └── one.png 
├── f_two 
│   ├── f_nested 
│   │   └── nest.png 
│   ├── three.png 
│   └── two.png 
├── out.txt 
└── test.py 

3 directories, 6 files 

여기 출력입니다 :

f_two  ['./f_two/three.png', './f_two/two.png'] 
f_nested ['./f_two/f_nested/nest.png'] 
f_one  ['./f_one/one.png'] 

당신이 만약 (배열이 상당히 크다고 때문에 나는 이미지 데이터를 포함하지 않았다) 마지막 루프 대신 print(images)을 사용하면 다음과 같이 표시됩니다.

{'f_two': {'./f_two/three.png': array([[[255, 255, 255], 
     [255, 255, 255], 
     [255, 255, 255], 
     ..., 

이 솔루션에 대한 참고 사항 :
사전을 사용한다는 것은 고유 한 키가 있어야한다는 의미입니다. 같은 이름의 폴더가있는 경우 마지막으로 읽은 폴더가 해당 디렉토리에있는 유일한 폴더가됩니다. 동일한 디렉터리 내의 중복 된 파일 이름에 대해서도 마찬가지입니다. 고유하지 않은 디렉토리 또는 파일 이름이있는 경우 다른 데이터 구조를 시도하거나 절대 경로를 사용하여 키가 고유한지 확인하십시오.