Правильно сортировать файлы JPG при итерации по папке - PullRequest
0 голосов
/ 06 февраля 2020

Я хочу перебрать набор файлов JPG в папке и t ie эти файлы JPG вместе в PDF. Каждый JPG представляет упорядоченную страницу в PDF, и, следовательно, для правильного преобразования этих * JPG в PDF, они должны быть соответствующим образом отсортированы, когда я выполняю итерацию в папке.

Моя файловая структура JPG в этом папка выглядит следующим образом:

filename_1.jpg
filename_2.jpg
filename_3.jpg
filename_4.jpg
filename_5.jpg
filename_6.jpg
filename_7.jpg
filename_8.jpg
filename_9.jpg
filename_10.jpg
filename_11.jpg
filename_12.jpg
filename_13.jpg
filename_14.jpg
filename_15.jpg

Где число в конце имени файла представляет номер страницы в PDF.

Когда я делаю следующее, чтобы проверить, отсортированы ли файлы в правильном порядке:

for file in sorted(os.listdir(folder_path)):
    print(file)

Я получаю следующий вывод, когда функция sorted сортирует файловую структуру:

filename_1.jpg
filename_10.jpg
filename_11.jpg
filename_12.jpg
filename_13.jpg
filename_14.jpg
filename_15.jpg
filename_2.jpg
filename_3.jpg
filename_4.jpg
filename_5.jpg
filename_6.jpg
filename_7.jpg
filename_8.jpg
filename_9.jpg

Пока это в правильном порядке "сортировки" из alphanumeri c перспектива, она не в правильном порядке страниц, и, следовательно, полученный PDF не будет отсортирован должным образом. Я знаю, если я добавлю ноль перед каждым из файлов с номерами страниц di git, это будет работать правильно (т.е. filename_01.jpg вместо filename_1.jpg), однако у меня более 8000 файлов jpg в более чем 600 папках jpgs, и преобразование всех этих отдельных файлов с номерами страниц di git таким способом не является простой задачей для меня.

У кого-нибудь есть предложения о том, как я могу заставить эти файлы сортировать соответствующим образом, основываясь на номер страницы в конце имени файла?

1 Ответ

1 голос
/ 06 февраля 2020

, возможно, есть более эффективный способ сделать это, но если имена ваших файлов соответствуют формату в опубликованном вопросе <string>_<int>.<ext>, тогда это будет работать:

files={int(file.split("_")[1].split(".")[0]) : file for file in sorted(os.listdir(folder_path))}
sorted_files=[files[file_key] for file_key in sorted(files.keys())]

в основном, вы создаете словарь int ключ, соответствующий номеру файла, сопоставленному с именем файла, вы сортируете ключи и получаете из него список значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...