python - 获取同一文件的多个随机损坏副本的 "average"

标签 python file bitwise-operators

由于 Controller 损坏,文件在从 USB 闪存驱动器下载时会随机损坏。 我下载了同一个文件的多个副本,每个副本的错误似乎通常是唯一且随机的。

因此,我需要一个脚本来比较同一文件的几个(3 到 5 个)损坏的副本(每个副本的大小约为 100 Mb),并为每个字节“投票”以获得正确的值,然后将其附加到输出文件。

有没有一种在 Python 3 中快速简便地实现它的方法?

最佳答案

将字节流压缩在一起,并使用计数器在每个位置获取共识字节。

from functools import partial
from collections import Counter
from contextlib import ExitStack
from mmap import mmap, PROT_READ

fnames = ["t1.txt", "t2.txt"]

with ExitStack() as stack:
    fhs = [stack.enter_context(open(f, 'rb')) for f in fnames]
    out = stack.enter_context(open("fixed", 'wb'))
    streams = [mmap(f.fileno(), 0, prot=PROT_READ) for f in fhs]
    for bs in zip(*streams):
        c = Counter(bs)
        out.write(c.most_common(1)[0][0])

关于python - 获取同一文件的多个随机损坏副本的 "average",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50574021/

相关文章:

python - 元组列表(从元组中删除特殊项目)

python - 基于时间的数据到二进制标签的分类器

python - 如何使用 Python Suds(版本 0.3.6)SOAP 库 : TypeNotFound exception? 导入 XSD 模式

android - 将 xml 文件发送到 android 中的 Web 服务

python - 如何用python发送邮件

c - C中的可变大小数组。可以吗?

javascript - 从插件获取本地文件到javascript

java - java中的按位逻辑运算符

haskell - 二进制表示的 Data.Bits 操作

javascript - 按位运算得到 1 if > 0 else 0