python - 数据雕刻循环改进

标签 python io

我目前正在开发一个Python应用程序,它将为jpeg文件数据雕刻一个 block 设备。我们只能说它有时有效有时无效。我创建了它,以便读取 block 设备,直到找到 ffd8,然后保持流打开并通过循环搜索 ffd9 闭包。尽管我总是需要考虑所有 ffd9 关闭,即使是在第一个关闭之后。因此,这往往是一项非常密集的操作。假定设备有 25 个 jpeg 以及大量其他数据,则循环非常引人注目,而且会运行很多次。

该程序并不是世界上最慢的东西,但我认为它可以更快、更高效。我正在寻找一种更好的方法来搜索 block 设备并以更有效的方式提取数据。我也不想杀死 HDD 或保存 block 设备镜像的驱动器。

那么有人知道更好的方法来系统地处理数据的搜索和提取吗?

最佳答案

直接读取 block 设备的麻烦在于不能保证任何给定文件的 block 是连续的。这意味着,即使您在 block 13 中找到魔术标记字节 0xFFD8,也不能保证 block 14 属于同一个文件,无论它是否包含 0xFFD9 结束标记。 (大多数文件将从 block 边界开始;文件结尾可能在任何地方,甚至可能跨越 block 边界。)

有什么更好的处理方法吗?好吧,这取决于您想要什么 - 但如果您只查看当前分配的 block ,则使用 POSIX C 函数 ftw (nftw) 的 Python 模拟来扫描文件系统,并依次读取每个文件。这不会在空闲列表中找到已删除 JPEG 文件的证据 - 如果这就是您所追求的,那么您将需要或多或少地执行您正在做的事情,但将该信息与您在文件系统中找到的信息相关联恰当的。绘制这些区 block 的 map (充其量)会很困难。

关于python - 数据雕刻循环改进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2018210/

相关文章:

python - 在 Python 中处理 json api 响应时出现问题

python - 修改原始列表直到找到一个字符串

java - 扫描仪在使用 next() 或 nextFoo() 后跳过 nextLine()?

java - 选择文件没有发生

java - 异常类不工作

python - 根据长度向 df.Column 中的字符串添加尾随 0

python - 在情节图例中写 $\sqrt(2)$ 而不是 1.414

python - 从 Numpy Meshgrid 生成位置向量

generics - 如何使用用户输入变量作为通用包的参数?

c - 在c中execlp重定向stdin