python - 在目录中查找图像序列 - 比 os.walk() 更快?

标签 python traversal

我正在尝试编写一个脚本来遍历目录(与 os.walk 几乎相同),但不使用 os.walk。原因是每个目录都充满了图像序列,而 os.walk 花费了太多时间。

我的目的是收集每个图像序列的文件名...所以目前,一旦找到序列中的一个单一图像,我就会跳出循环。如果目录中只有 1 个图像序列,则此方法可以正常工作,但如果目录中有 2 个(或更多)图像序列怎么办?这就是我要摆脱困境的地方。

这是我到目前为止所拥有的:

def find_all_ImageSequences(dir):

    for object in os.listdir(dir):
        if os.path.isdir(dir + "\\" + str(object)):
            find_all_ImageSequences(dir + "\\" + str(object))
        else:
            if object.endswith(('.dpx','.jpg','.jpeg','.exr','.tif')):
                Image_Sequences_List.append(dir + "\\" + str(object))
                image_filename = object.split(".")[0]
                extras = [x for x in os.listdir(dir) if x.split(".")[0] != image_filename]
                if extras:
                    "try to take the 1st image and add it to my Image_Sequences_List"
                break

“extras”列表理解将继续查找该目录中的每个对象,即使在找到第二个图像序列之后也是如此。一旦找到下一个图像序列的第一帧,是否有可能摆脱这个困境?

我考虑过使用:

if any([x for x in os.listdir(dir) if x.split(".")[0] != image_filename]):
    "do something"

但这似乎适得其反,因为我必须再次遍历当前目录才能找到下一个序列。

最好的方法是什么?

非常感谢

最佳答案

此代码使用一组来跟踪已添加的文件名:

def find_all_ImageSequences(dir):
    seen = set()
    for object in os.listdir(dir):
        if os.path.isdir(dir + "\\" + str(object)):
            find_all_ImageSequences(dir + "\\" + str(object))
        else:
            if object.endswith(('.dpx','.jpg','.jpeg','.exr','.tif')):
                image_filename = object.split(".", 1)[0]
                if image_filename not in seen:
                    Image_Sequences_List.append(dir + "\\" + str(object))
                    seen.add(image_filename)
<小时/>

要提高性能,请查看 https://github.com/benhoyt/scandir它有一个 os.walk 替代品,据称在 Windows 上速度大约是 8-9 倍,在 Linux 和 Mac OS X 上大约是 2-3 倍。

关于python - 在目录中查找图像序列 - 比 os.walk() 更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21755625/

相关文章:

jquery遍历

java - 如何使用java打印数组在i和i+1索引处的索引?

java - 从根节点到所有子节点的 n-Tree 遍历

Python子进程: Unable to Escape Quotes

python - 将 GraphFrames ShortestPath Map 转换为 PySpark 中的 DataFrame 行

Python HTML 表转 JSON

java - 图前序/后序遍历?

haskell - 编写更复杂的遍历(镜头)

python - ANTLR4 因 Lexer/Parser 错误而终止 Python

python - 我如何分发小批量 kmeans (scikit-learn) 的处理?