首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python不能完全读取"warc.gz“文件。

Python不能完全读取"warc.gz“文件。
EN

Stack Overflow用户
提问于 2016-03-23 09:05:58
回答 1查看 2.1K关注 0票数 2

对于我的工作,我刮刮网站,并将它们写到gzipped档案中(扩展名为"warc.gz")。我使用Python2.7.11和Warc0.2.1库。

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

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

我发现有些人也有这个问题(https://github.com/internetarchive/warc/issues/21),但没有找到解决办法。

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

提前感谢!

示例:

我创建如下新的warc.gz文件:

代码语言:javascript
复制
import warc
warc_path = "\\some_path\file_name.warc.gz"
warc_file = warc.open(warc_path, "wb")

要编写我使用的记录:

代码语言:javascript
复制
record = warc.WARCRecord(payload=value, headers=headers)
warc_file.write_record(record)

这将创建完美的"warc.gz“文件。他们没有任何问题。所有,包括"\r\n“都是正确的。但当我读到这些文件时,问题就开始了。

要读取我使用的文件:

代码语言:javascript
复制
warc_file = warc.open(warc_path, "rb")

要循环遍历记录,我使用:

代码语言:javascript
复制
for record in warc_file:
    ...

问题是,不是所有的记录都是在"warc.gz“文件的循环过程中找到的,而所有的记录都是在"warc”文件中找到的。使用这两种类型的文件是在warc-库本身中解决的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-23 12:32:56

看来,自定义gzipwarc.gzip2.GzipFile中的处理、用warc.utils.FilePart进行文件分割和在warc.warc.WARCReader中读取似乎是一个整体(使用python2.7.9、2.7.10和2.7.11进行测试)。当它不接收任何数据,而是接收新的标头。时,它就停止了。

基本的stdlib gzip似乎可以很好地处理链接文件,因此这也应该是可行的:

代码语言:javascript
复制
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()
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36173786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档