gpt4 book ai didi

Python 无法完全读取 "warc.gz"文件

转载 作者:太空宇宙 更新时间:2023-11-04 10:14:38 25 4
gpt4 key购买 nike

对于我的工作,我抓取网站并将它们写入 gzipped 网络存档(扩展名为“warc.gz”)。我使用 Python 2.7.11 和 warc 0.2.1 库。

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

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

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

我猜测 Python 2.7.11 中的“gzip”可能存在错误。是否有人对此有经验,并且知道如何解决这个问题?

提前致谢!

示例:

我像这样创建新的 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)

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

读取我使用的文件:

warc_file = warc.open(warc_path, "rb")

要遍历我使用的记录:

for record in warc_file:
...

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

最佳答案

看来 warc.gzip2.GzipFile 中的自定义 gzip 处理, 文件拆分 warc.utils.FilePart并阅读 warc.warc.WARCReader作为一个整体被破坏(使用 python 2.7.9、2.7.10 和 2.7.11 进行测试)。它在 receives no data instead of a new header 时停止.

看起来基本的标准库 gzip可以很好地处理链接文件,因此这也应该有效:

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

关于Python 无法完全读取 "warc.gz"文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36173786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com