得到"平均"同一文件的几个随机破坏的副本

时间:2018-05-28 22:22:25

标签: python file bitwise-operators

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

因此,我需要一个脚本来比较同一个文件的几个(3到5个)破碎副本(每个大小约100 Mb)和'投票'为每个字节的正确值,然后将其附加到输出文件。

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

1 个答案:

答案 0 :(得分:3)

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

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])