2016-06-10 4 views
0

폴더에 이미지 경로 이름을 표시하는 프로그램에 대해 다음 코드를 작성했습니다. 그러나, 출력에서 ​​볼 수 있듯이, 사진의 경로는 정렬 된 것을 사용하더라도 올바른 순서로 표시되지 않습니다. 어떻게 그들을 정렬 된 순서로 표시 할 수 있습니까?파이썬 정렬 된 파일 순서

코드 :

import os 
import sys 
from PIL import Image 
import PIL.ImageOps 
import glob 

path="/home/srilatha/Desktop/Research_intern/Data_sets/Expanded_data_set/1/" 
print(path) 
files=sorted(glob.glob(path+"*.JPG")) 
#print(files) 
file_index=0 
for f in files: 
    file_index=file_index+1 
    print(f,file_index) 

출력 :

/home/srilatha/Desktop/Research_intern/Data_sets/Expanded_data_set/1/ 
/home/srilatha/Desktop/Research_intern/Data_sets/Expanded_data_set/1/1.JPG 1 
/home/srilatha/Desktop/Research_intern/Data_sets/Expanded_data_set/1/10.JPG 2 
/home/srilatha/Desktop/Research_intern/Data_sets/Expanded_data_set/1/11.JPG 3 
/home/srilatha/Desktop/Research_intern/Data_sets/Expanded_data_set/1/12.JPG 4 
/home/srilatha/Desktop/Research_intern/Data_sets/Expanded_data_set/1/13.JPG 5 
/home/srilatha/Desktop/Research_intern/Data_sets/Expanded_data_set/1/14.JPG 6 
/home/srilatha/Desktop/Research_intern/Data_sets/Expanded_data_set/1/2.JPG 7 
/home/srilatha/Desktop/Research_intern/Data_sets/Expanded_data_set/1/3.JPG 8 
/home/srilatha/Desktop/Research_intern/Data_sets/Expanded_data_set/1/4.JPG 9 
/home/srilatha/Desktop/Research_intern/Data_sets/Expanded_data_set/1/5.JPG 10 
/home/srilatha/Desktop/Research_intern/Data_sets/Expanded_data_set/1/6.JPG 11 
/home/srilatha/Desktop/Research_intern/Data_sets/Expanded_data_set/1/7.JPG 12 
/home/srilatha/Desktop/Research_intern/Data_sets/Expanded_data_set/1/8.JPG 13 
/home/srilatha/Desktop/Research_intern/Data_sets/Expanded_data_set/1/9.JPG 14 
+0

그것은이다. 파일의'int' 캐스트 이름을 사용하여 파일을 정렬 해보십시오. 즉'file = path/to/file/7.jpg'이라면'n = int (file.split ('/') [- 1] .split ('.jpg'))'와 같은 것을 시도해보십시오. 'n '을 사용하여 정렬 – SvbZ3r0

+0

@ GughanRavikumar 정교하게 주시겠습니까? ''n ''을 사용하여 어떻게 정렬 할 수 있습니까? 나는 왜 당신이 이것을하고 있지만 그것을 구현하는 방법을 모르겠 이해했습니다. 감사! – Sibi

답변

3

이 파일 이름이 숫자 가정 작동합니다. 당신이 strings으로 파일을 분류하기 때문에

import os 
import sys 
from PIL import Image 
import PIL.ImageOps 
import glob 

path = "/home/srilatha/Desktop/Research_intern/Data_sets/Expanded_data_set/1/" 
print(path) 
files = glob.glob(path+"*.JPG") 
n = [int(i) for i in map(lambda x: x.split('/')[-1].split('.jpg')[0], files)] 
files = [x for (y, x) in sorted(zip(n, files))] 
print(files) 

기본적으로 코드가 작동하지 않습니다.

+0

오류 :'TypeError : int() 인수는 문자열이어야하며 바이트와 같은 객체 또는 숫자 여야합니다. '목록'이 아닙니다. – Sibi

+0

잘 작동합니다. 'int (i)'는'str'이고'list'가 아닌 인수로서'i'를 얻습니다. 'lambda x : x.split ('/') [- 1] .split ('. jpg') [0]'을 시도해보십시오. 파일 이름에 확장자 다음에 공백이있을 수 있습니다. – SvbZ3r0

+0

네, 효과가있었습니다. 문제는 무엇 이었습니까? – Sibi

2

다른 사람들이 언급했듯이 문자열을 비교합니다. 당신은이에 대한 사용자 지정 비교기를 만들 수 있습니다

files = glob.glob(path+"*.JPG") 
sortedfiles = sorted(files, key=lambda filepath: int(filepath.split('/')[-1].split('.jpg'))) 

전체 조각을 : 그들은 strings``로 분류되어 있기 때문에

import os 
import sys 
from PIL import Image 
import PIL.ImageOps 
import glob 

path="/home/srilatha/Desktop/Research_intern/Data_sets/Expanded_data_set/1/" 
print(path) 
files=glob.glob(path+"*.JPG") 
sortedfiles = sorted(files, key=lambda filepath: int(filepath.split('/')[-1].split('.jpg')[0])) 

for f in sortedfiles: 
    file_index=file_index+1 
    print(f,file_index)