Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python无法读取;warc.gz“;完全归档_Python_Gzip_Warc - Fatal编程技术网

Python无法读取;warc.gz“;完全归档

Python无法读取;warc.gz“;完全归档,python,gzip,warc,Python,Gzip,Warc,在我的工作中,我搜集网站并将其写入Gzip web存档(扩展名为“warc.gz”)。我使用Python 2.7.11和warc 0.2.1库 我注意到,对于大多数文件,我无法使用warc库完全读取它们。例如,如果warc.gz文件有517条记录,我只能读取其中大约200条 经过一些研究,我发现这个问题只发生在gzip文件中。扩展名为“warc”的文件没有此问题 我发现有些人也有这个问题(),但没有找到解决办法 我猜Python2.7.11中的“gzip”中可能有一个bug。也许有人有这方面的经

在我的工作中,我搜集网站并将其写入Gzip web存档(扩展名为“warc.gz”)。我使用Python 2.7.11和warc 0.2.1库

我注意到,对于大多数文件,我无法使用warc库完全读取它们。例如,如果warc.gz文件有517条记录,我只能读取其中大约200条

经过一些研究,我发现这个问题只发生在gzip文件中。扩展名为“warc”的文件没有此问题

我发现有些人也有这个问题(),但没有找到解决办法

我猜Python2.7.11中的“gzip”中可能有一个bug。也许有人有这方面的经验,并且知道如何解决这个问题

提前谢谢

示例:

我创建了新的warc.gz文件,如下所示:

import warc
warc_path = "\\some_path\file_name.warc.gz"
warc_file = warc.open(warc_path, "wb")
要编写记录,我使用:

record = warc.WARCRecord(payload=value, headers=headers)
warc_file.write_record(record)
for record in warc_file:
    ...
这将创建完美的“warc.gz”文件。他们没有问题。所有,包括“\r\n”都是正确的。但是当我读这些文件时问题就开始了

要读取文件,我使用:

warc_file = warc.open(warc_path, "rb")
要循环使用我使用的记录,请执行以下操作:

record = warc.WARCRecord(payload=value, headers=headers)
warc_file.write_record(record)
for record in warc_file:
    ...

问题是,在循环“warc.gz”文件的过程中,并不是所有记录都被找到,而它们都是为“warc”文件找到的。使用这两种类型的文件都在warc库中进行了处理。

似乎自定义的
gzip
处理、文件拆分和读入作为一个整体被破坏(使用python 2.7.9、2.7.10和2.7.11进行了测试)。当它停下来的时候,它会停下来

基本stdlib似乎可以很好地处理被链接的文件,因此这也应该起作用:

import gzip
import warc

with gzip.open('my_test_file.warc.gz', mode='rb') as gzf:
    for record in warc.WARCFile(fileobj=gzf):
        print record.payload.read()

请添加一个最小、完整且可验证的示例。甚至github中的相关问题也相当模糊。Ilja,warc库非常小,没有太多代码作为示例。要创建warc.gz文件,我使用
self.warc\u file=warc.open(self.warc\u路径,“wb”)
。要写入记录,我使用
record=warc.WARCRecord(有效负载=值,头=头)
。要读取记录,我使用self.warc\u file=warc.open(self.warc\u路径,“rb”)和self.warc\u文件中的记录:。问题是并不是所有的记录都能找到。我可以附上一个示例warc.gz文件,如果我知道如何在这里附上它……请将代码示例添加到您的问题中,使它们更容易找到(这就是它们所属的位置)。尽量减少示例,但要完整,因为它们很容易显示您想要发生的事情和实际发生的事情。一个小的示例数据集将重现您观察到的行为,这也将使人们更容易回答。Ilja,以上是代码示例。没有更多相关的代码示例。谢谢!:)我已经实施了类似的工作。问题主要是它是否是gzip库中的bug。应该向Python开发人员团队报告吗?正如您和我的解决方案所示,stdlib
gzip
工作正常。我很确定问题出在自定义
warc.gzip2
库中。对于我来说,它不适用于3个不同的python 2.7版本。