Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python文件夹中对40k图像进行排序_Python_Sorting_Operating System_Python Imaging Library_Glob - Fatal编程技术网

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

在python文件夹中对40k图像进行排序,python,sorting,operating-system,python-imaging-library,glob,Python,Sorting,Operating System,Python Imaging Library,Glob,假设我有一个包含40k张图片的共享文件夹。我想根据创建日期对图片进行排序,因为我的机器将每5秒向文件夹发送一张新图片。上面的代码可以工作,但它太慢,无法处理大约需要15分钟才能排序和显示的图片量。我只需要每1小时显示最新的60张图片。如果只需要使用最后60个项目,为什么不只循环排序的这一部分? 所以不是 组合中图像的: 组合[:60]中的图像的: 当然,我不确定哪个部分需要更长的时间(排序,或者在排序后处理图像)。 当然,正如Christian所说的,在管理完它们之后,尝试将它们排序到更多的

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

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

组合中图像的
组合[:60]中的图像的
当然,我不确定哪个部分需要更长的时间(排序,或者在排序后处理图像)。

当然,正如Christian所说的,在管理完它们之后,尝试将它们排序到更多的子目录中。

在排序之前,您必须过滤文件列表,这样您不关心的任何文件都不会被排序。我建议您将不需要的文件移动到另一个位置(最好组织得当)

要做到这一点,请在排序之前使用类似的方法:

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)

您是否有机会更改工作流程,使新图像在新文件夹中着陆,并在它们较旧时放入某种存档?这样工作真的没有效率。归档文件也应该细分,因为在一个文件夹中保存大量文件也不是一个好做法。您好,我无权更改工作流,因为它已经由供应商自己实施。我现在可以做的是编写一个程序从共享文件夹中提取,然后你应该尝试这样做,对所有文件进行排序,并将所有旧文件移动到某个存档/其他目录。通过这种方式,您可以摆脱排序算法的工作量,这应该是这里的薄弱环节。感谢您的回复。最后60项是否始终是最新的?这不起作用,因为我无法使用combo[:60]对最后60项进行排序。排序后,我的建议会有所帮助。。我的问题是,它在哪里停留的时间最长,是在排序部分,还是加载PIL库中的所有图像。如果让python先对其排序,然后只循环前60个项目,这将提高性能,因为将40k图像加载到pill或60中很重要。如果文件的排序已经很慢,最好的选择是Christian的建议。加载图像就可以了。分拣部分耗时约12分钟。在使用os时,列表目录中的最后一项是否总是显示新创建的文件?好的,显然我们需要尝试减少要对其执行操作的列表。你可以用已经处理过的文件写一个文件,然后跳过排序?也许您可以使用(搜索st_mtime),在处理之前检查创建时间,因为您可以比较时间戳。您还测试过python仅循环上述列表需要多长时间吗?如果打印所有文件需要12分钟,不要认为你能让它按你所希望的那样运行……这是非常清晰的。基督教
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)