由于控制器损坏,文件在从USB闪存驱动器下载时会随机损坏。 我已下载了同一文件的多个副本,并且每个副本的错误通常都是唯一且随机的。
因此,我需要一个脚本来比较同一个文件的几个(3到5个)破碎副本(每个大小约100 Mb)和'投票'为每个字节的正确值,然后将其附加到输出文件。
有没有一种快速简便的方法在Python 3中实现它?
答案 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])