检查包含数十万张图像的目录中损坏的文件的速度逐渐变慢

2024-03-27

所以我有 600,000 多张图像。我估计其中大约 5-10% 已损坏。我正在生成一个日志,准确记录与该图像相关的图像。

使用Python,到目前为止我的方法是这样的:

def img_validator(source):
    files = get_paths(source)  # A list of complete paths to each image
    invalid_files = []
    for img in files:
        try:
            im = Image.open(img)
            im.verify()
            im.close()
        except (IOError, OSError, Image.DecompressionBombError):
            invalid_files.append(img)

     # Write invalid_files to file

前 200-250K 图像的处理速度相当快,大约只需要 1-2 小时。我让该进程运行一夜(当时为 230K),8 小时后它仅为 310K,但仍在进行中。

有人知道这是为什么吗?起初我以为这可能是由于图像存储在 HDD 上,但这并没有真正意义,因为前 200-250k 速度非常快。


如果您有那么多图像,我建议您使用多重处理。我创建了 100,000 个文件,其中 5% 已损坏,并按如下方式检查它们:

#!/usr/bin/env python3

import glob
from multiprocessing import Pool
from PIL import Image

def CheckOne(f):
    try:
        im = Image.open(f)
        im.verify()
        im.close()
        # DEBUG: print(f"OK: {f}")
        return
    except (IOError, OSError, Image.DecompressionBombError):
        # DEBUG: print(f"Fail: {f}")
        return f

if __name__ == '__main__':
    # Create a pool of processes to check files
    p = Pool()

    # Create a list of files to process
    files = [f for f in glob.glob("*.jpg")]

    print(f"Files to be checked: {len(files)}")

    # Map the list of files to check onto the Pool
    result = p.map(CheckOne, files)

    # Filter out None values representing files that are ok, leaving just corrupt ones
    result = list(filter(None, result)) 
    print(f"Num corrupt files: {len(result)}")

样本输出

Files to be checked: 100002
Num corrupt files: 5001

在我的带有 NVME 磁盘的 12 核 CPU 上,这需要 1.6 秒,但对您来说应该仍然明显更快。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查包含数十万张图像的目录中损坏的文件的速度逐渐变慢 的相关文章

  • 使用Python的工业视觉相机[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在groupby之后将pandas数据框拆分为许多列

    我希望能够在 pandas 中使用 groupby 按列对数据进行分组 然后将其拆分 以便每个组都是数据框中自己的列 e g time data 0 1 2 0 1 2 3 0 2 3 4 0 3 1 2 1 4 2 3 1 5 3 4 1
  • 如何有条件地组合两个相同形状的 numpy 数组

    这听起来很简单 但我想我把它想得太复杂了 我想创建一个数组 其元素是从两个形状相同的源数组生成的 具体取决于源数组中哪个元素更大 为了显示 import numpy as np array1 np array 2 3 0 array2 np
  • 无法将 datetime.datetime 与 datetime.date 进行比较

    我有以下代码并收到上述错误 由于我是 python 新手 我无法理解这里的语法以及如何修复错误 if not start or date lt start start date 有一个datetime date 从日期时间转换为日期的方法
  • DataFrame 中的字符串,但 dtype 是对象

    为什么 Pandas 告诉我我有对象 尽管所选列中的每个项目都是一个字符串 即使在显式转换之后也是如此 这是我的数据框
  • Pytest:如何使用从夹具返回的列表来参数化测试?

    我想使用由固定装置动态创建的列表来参数化测试 如下所示 pytest fixture def my list returning fixture depends on other fixtures return a dynamically
  • 远程控制或脚本打开 Office 从 Python 编辑 Word 文档

    我想 最好在 Windows 上 在特定文档上启动 Open Office 搜索固定字符串并将其替换为我的程序选择的另一个字符串 我该如何从外部 Python 程序中做到这一点 OLE 什么 原生 Python 脚本解决方案 The doc
  • pandas 两个数据框交叉连接[重复]

    这个问题在这里已经有答案了 我找不到有关交叉联接的任何内容 包括合并 联接或其他一些内容 我需要使用 my function 作为 myfunc 处理两个数据帧 相当于 for itemA in df1 iterrows for itemB
  • 使用 Python 解析 XML,解析外部 ENTITY 引用

    在我的 S1000D xml 中 它指定了一个带有对公共 URL 的引用的 DOCTYPE 该 URL 包含对包含所有有效字符实体的许多其他文件的引用 我使用 xml etree ElementTree 和 lxml 尝试解析它并得到解析错
  • 在 Windows 上将 Word2vec 与 Tensorflow 结合使用

    In 本教程文件 https github com tensorflow models blob master tutorials embedding word2vec py L45通过 Tensorflow 找到以下行 第 45 行 来加
  • Python 相当于 Bit Twiddling Hacks 中的 C 代码?

    我有一个位计数方法 我正在尝试尽可能快地实现 我想尝试下面的算法位摆弄黑客 http graphics stanford edu seander bithacks html CountBitsSetParallel 但我不知道 C 什么是
  • 熊猫记忆

    我有冗长的计算 我重复了很多次 因此 我想使用记忆 诸如jug http packages python org Jug and joblib http packages python org joblib memory html 与Pan
  • 从 python 中的缩进文本文件创建树/深度嵌套字典

    基本上 我想迭代一个文件并将每行的内容放入一个深层嵌套的字典中 其结构由每行开头的空格数量定义 本质上 目标是采取这样的事情 a b c d e 并将其变成这样的东西 a b c d e Or this apple colours red
  • Python time.sleep - 永不醒来

    我认为这将是那些简单的问题之一 但它让我感到困惑 停止媒体 我是对的 找到了解决方案 查看答案 我正在使用 Python 的单元测试框架来测试多线程应用程序 很好而且很直接 我有 5 个左右的工作线程监视一个公共队列 以及一个为它们制作工作
  • Docker 日志中的 Python 异常标记为流:stdout

    我想解析和处理来自 docker 容器的所有错误 但当我期望 stderr 时 Python 异常标记为 stdout 举个简单的例子app py raise Exception 然后我在 docker 容器中运行这个文件 但在 var l
  • Scikit Learn - K-Means - 肘部 - 标准

    今天我想学习一些关于 K means 的知识 我已经了解该算法并且知道它是如何工作的 现在我正在寻找正确的 k 我发现肘部准则作为检测正确的 k 的方法 但我不明白如何将它与 scikit learn 一起使用 在 scikit learn
  • 向伪 shell (pty) 发出命令

    我尝试使用 subprocess popen os spawn 来运行进程 但似乎需要伪终端 import pty master slave pty openpty os write master ls l 应该发送 ls l 到从属终端
  • Pandas DataFrame:如何计算组中第一行和最后一行的差异?

    这是我的熊猫数据框 import pandas as pd import numpy as np data column1 338 519 871 1731 2693 2963 3379 3789 3910 4109 4307 4800 4
  • 字母尺度和随机文本上的马尔可夫链

    我想使用 txt 文件中的一本书中的字母频率生成随机文本 以便每个新字符 string lowercase 取决于前一个 如何使用马尔可夫链来做到这一点 或者使用每个字母都有条件频率的 27 个数组更简单 我想使用来自的字母频率生成随机文本
  • Python - 打印漂亮的 XML 为空标签文本创建开始和结束标签

    我正在编写一个 python 应用程序 它创建一个 ElementTree XML 然后使用 minidom 的 toprettyxml 将其写入文件 final tree minidom parseString ET tostring r

随机推荐

  • 计算元组大小

    我试图了解列顺序如何最小化 PostgreSQL 中的表大小 Example CREATE TABLE test column 1 int column 2 int column 3 bigint column 4 bigint colum
  • iBeacons 的三角测量示例

    我正在研究使用多个 iBeacons 进行 粗略 室内定位的可能性 该应用程序是一种 博物馆 设置 能够更容易地形成一个包含不同对象位置的网格 然后形成单独的信标 尽管这也不是不可能的 是否有使用多个信标对某种位置进行三角测量的示例 经验
  • 使用 itextsharp 将 Pdf 文件页面转换为图像

    我想使用 ItextSharp 库转换图像中的 Pdf 页面 知道如何转换图像文件中的每个页面 iText iTextSharp 可以生成和 或修改现有的 PDF 但它们不执行您正在寻找的任何渲染 我建议检查一下鬼脚本 https stac
  • .exp有什么用,.lib和.dll有什么区别?

    在编译和链接过程中 exp有什么用 lib 和 dll 有什么区别 我知道运行程序时会使用 lib 而链接和 dll将被使用 但 lib 和 dll 之间到底有什么区别呢 lib 文件是否不包含来自 dll 文件的函数的代码 使用两个单独的
  • 将静态库转换为共享库(从 libsome.a 创建 libsome.so):我的符号在哪里?

    这个问题的标题是精确的欺骗 https stackoverflow com questions 655163 convert a static library to a shared library 但该问题的答案对我没有帮助 我有一堆目标
  • 用java打开chm文件

    我想从我的 java 应用程序打开 CHM 帮助 文件 我的代码如下所示 Runtime getRuntime exec hh exe myhelpfile chm 可以用 但是如何用特定页面打开它 谢谢 汤姆 尝试这个 是否可以从 Hh
  • 在 Python 中对元组字典进行排序

    我知道已经有很多关于 python 排序列表 字典的问题了 但我似乎找不到对我的情况有帮助的问题 而且我正在寻找最有效的解决方案 因为我要对一个相当大的数据进行排序数据集 我的数据目前基本上是这样的 a a 1 2 3 b 3 2 1 我基
  • RMarkdown - 使用 kable 的表格中的不同字体类型?

    我正在使用 RMarkdown 生成 pdf 文档 是否可以使用 kable styling 更改表格中的字体类型 如果没有 您能推荐其他包吗 library dplyr library kableExtra kable mtcars al
  • 将转义字符发送到打印机

    我正在开发一个 C 应用程序 用于从 SATO 热转印打印机 CG408 TT 打印标签 为此 我使用 SBPL SATO 编程语言 看起来像下面这样
  • C++ 使用不同的流读取和写入同一文件

    我有两个流指向同一个文件 第一个是std ofstream os第二个是std ifstream is 都以二进制模式打开 我在用着os创建一个新文件 文件创建过程需要我 有时 读取写入文件的数据os The is流寻找所需的位置 读取一些
  • 实体框架一对零或一对关系,没有导航属性

    由于 FK 限制 我在尝试删除记录时遇到了问题 因此 我回到了绘图板 并试图指定这种关系应该如何运作 这是我的代码第一类 public class MemberDataSet Key DatabaseGeneratedAttribute D
  • 如何在 Linux 中打开程序的多个实例

    例如 要打开多个实例gedit编辑器我写了一个像这样的shell脚本 gedit gedit gedit gedit 但是在我运行我的 shell 脚本之后 example sh 我只能找到一个 gedit 实例 我什至用过 运算符 以便
  • ObjectSpace.count_objects 中每个哈希值的含义是什么?

    在 ruby 1 9 3 中 我使用 ObjectSpace 来检查内存问题 ObjectSpace count objects 返回一个哈希值 如下所示 TOTAL gt 1004232 FREE gt 258543 T OBJECT g
  • 锁定 MongoDB 中的文档

    我在网络应用程序中使用 pymongo 并且想要执行以下形式的操作 doc collection find document doc array1 append foo for y in doc array2
  • Analysis_options.yaml 中包含多个内容?

    我想组合两个 或更多 analysis options yaml我的项目的文件 但无法找到如何做到这一点的方法 这有效 include package pedantic analysis options yaml 这也有效 include
  • 错误:‘.’令牌之前需要有不合格的 id //(结构)

    我需要制作一个程序 从用户那里获取一小部分 然后对其进行简化 我知道如何做到这一点 并且已经完成了大部分代码 但我不断收到此错误 错误 令牌之前预期有不合格的 id 我已经声明了一个名为 ReducedForm 的结构 它包含简化的分子和分
  • Python,Matplotlib,散点图,更改单击点的颜色

    我有一个带有选择器事件的简单散点图 我想更改用鼠标单击的数据点的颜色 我的代码将改变整个数组的颜色 我怎样才能改变一个特定的点 import sys import numpy as np import matplotlib pyplot a
  • 匹配集的数据结构

    我有一个应用程序 其中有很多组 一套可能是 4 7 12 18 唯一编号且全部小于 50 然后我有几个数据项 1 1 2 4 7 8 12 18 23 29 2 3 4 6 7 15 23 34 38 3 4 7 12 18 4 1 4 7
  • 二叉搜索树验证的空间复杂度

    验证二叉树是否为 BST 的最佳算法如下 IsValidBST root infinity infinity bool IsValidBST BinaryNode node int MIN int MAX if node null retu
  • 检查包含数十万张图像的目录中损坏的文件的速度逐渐变慢

    所以我有 600 000 多张图像 我估计其中大约 5 10 已损坏 我正在生成一个日志 准确记录与该图像相关的图像 使用Python 到目前为止我的方法是这样的 def img validator source files get pat