按特定顺序从目录中打开文件

Opening files from directory in specific order

我有一个包含大约 500 张图像的文件夹,我正在以从 0 到 360 的随机角度旋转这些图像。这些文件被命名为 00i.jpeg,其中 i = 0 然后是 i = 1。例如,我有一张名为 009.jpeg 的图片,一张名为 0052.jpeg 的图片,还有一张名为 00333.jpeg 的图片。我下面的代码按原样旋转图像,但文件的读取方式不正确。

我想我需要某种步进代码块,它从 0 开始,每次都加一个,但我不确定我会把它放在哪里。 os.listdir 不允许我这样做,因为(根据我的理解)它只是列出了文件。我尝试使用 os.walk,但无法使用 cv2.imread。我收到 SystemError: <built-in function imread> returned NULL without setting an error 错误。

有什么建议吗?

import cv2
import imutils
from random import randrange
import os

os.chdir("C:\Users\name\Desktop\training\JPEG")


j = 0
for infile in os.listdir("C:\Users\name\Desktop\training\JPEG"):
    filename = 'testing' + str(j) + '.jpeg'
    i = randrange(360)
    image = cv2.imread(infile)
    rotation_output = imutils.rotate_bound(image, angle=i)
    os.chdir("C:\Users\name\Desktop\rotate_test")
    cv2.imwrite("C:\Users\name\Desktop\rotate_test\" + filename, rotation_output)
    os.chdir("C:\Users\name\Desktop\training\JPEG")
    j = j + 1
print(infile)
000.jpeg
001.jpeg
0010.jpeg
00100.jpeg
...

需要:

print(infile)
000.jpeg
001.jpeg
002.jpeg
003.jpeg
...

首先获取文件列表,然后使用 key 排序,其中键是不带扩展名的文件名的整数版本。

files = os.listdir("C:\Users\name\Desktop\training\JPEG")
files.sort(key=lambda x:int(x.split('.')[0]))

for infile in files:
    ...

实际例子:

files = ['003.jpeg','000.jpeg','001.jpeg','0010.jpeg','00100.jpeg','002.jpeg']
files.sort(key=lambda x:int(x.split('.')[0]))
print(files)

输出

['000.jpeg', '001.jpeg', '002.jpeg', '003.jpeg', '0010.jpeg', '00100.jpeg']