2016-06-10 2 views
0

Я написал следующий код программы для отображения имен путей изображения в папке. Однако, как видно на выходе, пути изображений не отображаются в правильном порядке, несмотря на то, что я использовал сортировку. Как я могу отображать их в отсортированном порядке?Python отсортированный порядок файлов

Код:

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

Это потому, что они сортируются как 'strings'. Попробуйте выполнить их сортировку с использованием имени 'int' cast. т.е. если это 'file = путь/to/file/7.jpg' попробуйте что-то вроде: 'n = int (file.split ('/') [- 1] .split ('. jpg'))', а затем сортировать с помощью 'n' – SvbZ3r0

+0

@GughanRavikumar Не могли бы вы рассказать? Как мы можем сортировать с помощью '' '. Я понял, почему вы это делаете, но я не уверен, как его реализовать. Благодаря! – Sibi

ответ

3

Это должно работать, если имена файлов номера.

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) 

По сути, ваш код не работает, потому что вы отсортировали файлы как strings.

+0

Ошибка: аргумент 'TypeError: int() должен быть строкой, байтовым объектом или числом, а не« списком » ' – Sibi

+0

Это отлично работает для меня. 'int (i)' получает 'i' как аргумент, который является' str', а не 'list'. Попробуйте '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'))) 

Всего фрагмент кода:

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)