我可以循环浏览目录和子目录并将某些文件存储在阵列中吗



我有一个文件夹,其中包含许多子文件夹以及这些子文件夹中的图像。我有一段代码可以循环浏览文件夹和子文件夹,并一次打印出每个图像的名称。我希望所有这些图像名称都存储在一个数组中。如何使循环将每个图像名称附加到同一数组?

到目前为止,我只在Linux或Matlab上看到过类似的解决方案,但在python上没有。

files = []
#r=root, d=directories, f = files
for r, d, f in os.walk(path):
for face_image in f :
if face_image.endswith("g"): #to get all '.jpg' and all '.png' files
print(face_image)

当我运行上面的循环时,我会打印出大约1000个图像名称。但是,当我尝试在循环之外打印(face_image(时,只打印循环中最终图像的名称。我现在这样做是因为我还没有将每个名称附加到数组中,但不确定如何进行?任何帮助都将不胜感激!

使用pathlib和递归glob模式:

from pathlib import Path
file_types = ("jpg", "png")
file_paths = []
for file_type in file_types:
file_paths.extend(Path(".").glob(f"**/*.{file_type}"))
file_names = [file_path.name for file_path in file_paths]

打印声明后,可以使用files.append(face_image)将人脸图像添加到列表中。循环完成后,所有有效的图像名称都将在列表中供您使用。

我不确定这是否是一个合法的问题。您需要将文件追加到列表中。

files = []
#r=root, d=directories, f = files
for r, d, f in os.walk(path):
for face_image in f :
if face_image.endswith("g"): #to get all '.jpg' and all '.png' files
print(face_image)
files.append(face_image)

你可以试试这样的东西:

files = []
for r, d, f in os.walk(path):
# collect all images
files += [os.path.join(r, file) for file in f]
# filter images
files = [ff for ff in files if ff.endswith('g')]

或者更紧凑一点:

files = []
for r, d, f in os.walk(path):
# collect all images that end with 'g'
files += [os.path.join(r, file) for file in f if file.endswith('g')]

最新更新