对文件夹python中的40k图像进行排序

问题描述

import os
import time
from PIL import Image as PImage
import pathlib 
import glob

try:
    path = r"\\x.x.x.x\PVCTData\ELImages\2021_03_08"
    os.chdir(path)
    combo = os.listdir(path)
    combo.sort(key=os.path.getctime,reverse=True)
    print("done")
    print(combo)
    x=0
    loadedimages=[]
 
    for image in combo:
            print(image)
            img = PImage.open(os.path.join(path,image))
            loadedimages.append(img)
            x+=1
            if x>3:
                break
    print(loadedimages)
    loadedimages[0].show()
    loadedimages[1].show()
    loadedimages[2].show()
except Exception as ex:
    print(ex)

假设我有一个包含 40k 图片的共享文件夹。我想根据创建日期对图片进行排序,因为我的机器会每 5 秒向文件夹发送一次新图片。上面的代码可以工作,但处理图片数量太慢,需要大约 15 分钟才能排序和显示。我只需要每 1 小时显示最新的 60 张图片

解决方法

排序前必须过滤文件列表,这样任何你不关心的文件都不会被排序。我建议您将不需要的文件移动到其他位置(组织得当是一个加分项)。

要做到这一点,请在排序之前使用以下内容:

combo = os.listdir()
currentTime = time.time()
timerange = 310
oldestOK = currentTime - timerange
filtered = list()
for file in os.listdir():
    if path.getctime(file) > oldestOK:
        filtered.append(file)

filtered.sort(key=os.path.getctime,reverse=True)
,

如果您只需要使用最后 60 个项目,为什么不只循环排序的那部分?
所以代替

for image in combo:
for image in combo[:60]:

当然,我不确定哪个部分需要更长的时间(排序或排序后处理图像)。
当然,Christian 也说过,在您管理它们之后,尝试在更多子目录中对它们进行排序。