在Python中存储大量类似抓取的HTML文件有什么好的方法吗?
Is there a good way to store large amounts of similar scraped HTML files in Python?
我在 Python 中编写了一个网络抓取工具,我有大量(数千)个极其相似但又不完全相同的文件。文件当前使用的磁盘 space 为 1.8 GB,但如果我将它们压缩为 tar.xz,它们将压缩为 14.4 MB。我想要比 1.8 GB 更接近 14.4 MB。
以下是我考虑过的一些事情:
我可以只使用 Python 标准库中的 tarfile 并将文件存储在那里。问题是如果不重新压缩所有需要一段时间的文件,我将无法修改 tar 中的文件。
我可以只使用 Python 标准库中的 difflib,但我发现这个库没有提供任何应用“补丁”来重新创建新文件的方法。
我可以使用 Google 的 diff-match-patch Python 库,但是当我阅读文档时,他们说“试图提供 HTML,XML 或通过模糊匹配或补丁的其他一些结构化内容可能会导致问题。”,考虑到我想使用这个库更有效地存储 HTML 文件,这听起来对我没有帮助.
那么在存储大量类似的HTML文件时,有没有办法节省磁盘space?
你可以使用字典。
Python's zlib interface 支持字典。 compressobj
和 decompressobj
函数都采用可选的 zdict
参数,这是一个“字典”。在这种情况下,字典只不过是 32K 的数据,其中包含您希望在压缩数据中出现的字节序列。
由于您的文件每个大约 30K,这对您的应用程序来说效果很好。如果您的文件确实“非常相似”,那么您可以取其中一个文件并将其用作字典来压缩所有其他文件。
尝试一下,并衡量压缩比不使用字典的改进。
我在 Python 中编写了一个网络抓取工具,我有大量(数千)个极其相似但又不完全相同的文件。文件当前使用的磁盘 space 为 1.8 GB,但如果我将它们压缩为 tar.xz,它们将压缩为 14.4 MB。我想要比 1.8 GB 更接近 14.4 MB。
以下是我考虑过的一些事情:
我可以只使用 Python 标准库中的 tarfile 并将文件存储在那里。问题是如果不重新压缩所有需要一段时间的文件,我将无法修改 tar 中的文件。
我可以只使用 Python 标准库中的 difflib,但我发现这个库没有提供任何应用“补丁”来重新创建新文件的方法。
我可以使用 Google 的 diff-match-patch Python 库,但是当我阅读文档时,他们说“试图提供 HTML,XML 或通过模糊匹配或补丁的其他一些结构化内容可能会导致问题。”,考虑到我想使用这个库更有效地存储 HTML 文件,这听起来对我没有帮助.
那么在存储大量类似的HTML文件时,有没有办法节省磁盘space?
你可以使用字典。
Python's zlib interface 支持字典。 compressobj
和 decompressobj
函数都采用可选的 zdict
参数,这是一个“字典”。在这种情况下,字典只不过是 32K 的数据,其中包含您希望在压缩数据中出现的字节序列。
由于您的文件每个大约 30K,这对您的应用程序来说效果很好。如果您的文件确实“非常相似”,那么您可以取其中一个文件并将其用作字典来压缩所有其他文件。
尝试一下,并衡量压缩比不使用字典的改进。