按特定顺序从目录中打开文件
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']
我有一个包含大约 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']