Python 2.7 FileCMP.CMP返回错误,即使GZPICTED文件相同



我正在比较一堆fastq.gz文件。每个文件是〜4G:

if filecmp.cmp(f1,f2,shallow=False)

它返回false,因为在F1和F2中是不同的。但是,当我使用diff/comm比较文件时,我将获得0输出(我解压缩然后比较(。我尝试了浅= trim and fals。我正在尝试打印出差异,但它的内存不足。

diff=difflib.ndiff((gzip.open(f1)).readlines(),(gzip.open(f2)).readlines())
print [i for i in diff if i.startswith('+')]

是因为文件被gzze吗?关于如何在不解压缩的情况下如何比较它们的任何想法?(每个文件是200m行(

谢谢!

通常,您需要比较未压缩的输出。这是确定确定两个GZIP文件是否具有相同未压缩内容的唯一方法。它们本可以通过不同的压缩水平或不同的GZIP软件进行压缩,从而给出不同的压缩结果。唯一的保证是,当您压缩然后解压缩时,您将获得原始输入。无法保证,当您解压缩然后压缩您获得原始输入时。

如果您控制了GZIP进程,则使用相同的代码和相同的压缩级别和其他选项,则可以由于标头内容而获得不同的输出。标题可能具有不同的时间戳,不同的文件名或其他变体。在这种情况下,您可以跳过每个标题(使用RFC 1952作为标头结束的指南(,并比较每个标题的其余部分。鉴于所陈述的条件,两个文件的剩余将是相同的。

您可以做的另一件事,如果您控制了压缩,并且您知道每个GZIP文件由一个GZIP成员组成,则可以检查每个文件的最后八个字节。如果这些不相同,则压缩数据是不同的。如果它们是相同的,则内容 May 是相同的,因此您需要解压缩和比较或使用上面的方法。这可以节省大量时间,几乎不必比较具有不同内容的GZIP文件。最后八个字节是未压缩数据的四字节CRC,未压缩数据模型2 32

的长度

相关内容

最新更新