问题标签 [bzip2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python bz2file 比 bz2 慢吗?
我有一个使用正则表达式解析 BZ2 压缩日志文件的 Python 脚本。
我们的表现非常糟糕,我最初认为这是我的正则表达式 - 但是,当我进一步观察时,似乎 bz2file 表现不佳。
我们使用的是 Python 2.6 和 bz2file 0.9。
我注意到使用 Bz2file (http://pypi.python.org/pypi/bz2file) 顺序读取文件似乎比使用内置 bz2 实现慢得多。
我写了两个测试脚本 - 一个使用 bz2:
另一个使用 bz2file:
我给他们两个计时:
为了比较, bzcat 在同一个文件上:
我的理解是 bz2file 只是关于 bz2 的一个包装器,但添加了对多流 BZ2 文件(我们确实使用)的处理。
bz2file 可能比 bz2 慢得多,还有其他原因吗?(或者我上面的分析有缺陷吗?)如果是这样,有什么方法可以加快 bz2file 的速度吗?
干杯,维克多
编辑 - 我做了一些更多的测试,包括在 Python 3.3 上 - 显然 bz2file 是 Python 3.3 的 bz2 模块的反向移植 - 并且还按照 jordanm 的建议刷新缓存(我在每次运行之间的单独终端中以 root 身份执行此操作):
这里似乎确实有一些有趣的东西,不确定这是我的方法,还是 Python 2.x 的 bz2 和 Python 3.x 的 bz2 之间存在实际的性能回归。
python - 读取内存映射的 bzip2 压缩文件
所以我在玩维基百科转储文件。这是一个经过 bzip 压缩的 XML 文件。我可以将所有文件写入目录,但是当我想进行分析时,我必须重新读取磁盘上的所有文件。这给了我随机访问,但它很慢。我有 ram 将整个 bzip 压缩文件放入 ram。
我可以很好地加载转储文件并读取所有行,但我无法在其中查找,因为它很大。从表面上看,bz2 库必须先读取并捕获偏移量,然后才能将我带到那里(并将其全部解压缩,因为偏移量以解压缩字节为单位)。
无论如何,我正在尝试映射转储文件(~9.5 gigs)并将其加载到 bzip 中。我显然想在以前的 bzip 文件上对此进行测试。
我想将 mmap 文件映射到 BZ2File 以便我可以通过它寻找(以获取特定的、未压缩的字节偏移量),但从看起来,如果不解压缩整个 mmap 文件这是不可能的(这将超过 30千兆字节)。
我有什么选择吗?
这是我为测试而编写的一些代码。
这一切都让我想知道,bz2 文件对象有什么特别之处,它允许它在查找后读取一行?它是否必须先读取每一行才能从算法中获取校验和才能正确计算?
python - 缺少 python bz2 模块
我已经安装在我的主目录中。
我正在尝试运行一个需要 python 2.7.x 版本的脚本,但我缺少 bz2 错误
我尝试安装 bz2 模块,但出现很多错误
c++ - 使用 bzip 提升 iostream - 未解析的符号
我的项目使用的是带有 bzip2 的 Boost iostreams 的旧版本。我现在正在尝试升级到 Boost 1.51。起初我没有用 bzip 编译,所以很明显我让链接器大喊 libboost_bzip2-vc100-mt-sgd-1_51.lib 丢失。然后我按照这些说明(并添加了静态标志)来编译这个文件。
但是,现在运行链接器会返回一堆缺少的符号:
有什么想法为什么 lib 不包含所有这些代码?我错过了什么?我在 Windows 上使用 VS2010。
编辑:明白了!
有一个旧版本的 libboost_iostreams-vc100-mt-sgd-1_51.lib,它是在没有 bzip 的情况下编译的。我仍然不确定的是:对于我使用的原始编译:
这产生了以下文件:
对于“正确”的编译(解决了问题),我使用了:
即简单地删除了 zlib,因为它对我来说是不必要的。它产生了:
为什么 iostreams 库不是在原始编译中生成的?很奇怪。
谢谢。
unix - 比较 unix 中的 bz2 文件
我在 unix 服务器上管理多个数据库,并使用mysqldump
. 由于(其中一些)这些数据库非常大(20+Gb),我通常使用bzip2
, 压缩备份的 .sql 文件以获取压缩的 bz2 文件。
作为备份过程的一部分,我检查新备份文件的大小是否大于或等于先前备份文件的大小——我们每天都向这些数据库添加数据,但很少从这些数据库中删除数据数据库。
对备份文件大小的检查是对备份质量的检查 - 鉴于我们的数据库主要只是在大小上增长,如果新备份小于旧备份,则意味着 a) 某些内容已从数据库中删除(在这种情况下,我应该检查一下...)或 b)备份出了问题(在这种情况下,我应该检查一下原因...)。
但是,如果我比较 bz2 文件的大小 - 例如,使用比较(使用test
) of stat %s
,即使数据库的大小增加了,bz2 文件也可能缩小了 - 大概是因为更有效的压缩。
那么 - 我如何比较备份文件的大小?
- 一种选择是将之前的备份文件从 .bz2 解压缩为 .sql,然后比较这些 .sql 文件的大小。但是,鉴于这些文件非常大(20+Gb),压缩/解压缩可能需要一段时间......
- 另一种选择是将以前的备份文件保留为 .sql,然后再次比较 .sql 文件。这是我的首选选项,但需要注意确保我们最终不会出现大量 .sql 文件 - 因为这会很快耗尽我们的硬盘驱动器。
或者,SO 社区中的某个人可能有更好或更聪明的想法......?
java - 如何使用 CBZip2OutputStream 压缩多个文件
我使用 CBZip2OutputStream 创建一个压缩的 bzip 文件。有用。
但我想在一个 bzip 文件中压缩多个文件,但不使用 tar 存档。
如果我有file1、file2、file3,我希望它们在files.bz2 中而不是在归档files.tar.bz2 中。
有可能的 ?
c - 使用 bzip2 低级例程压缩数据块
概述
我正在使用libbzip2
库中的低级调用: BZ2_bzCompressInit()
,BZ2_bzCompress()
并将BZ2_bzCompressEnd()
数据块压缩到标准输出。
我正在从更高级别的调用中迁移工作代码,因为我有一个字节流进入,我想将这些字节压缩成一组离散的块(离散块是一组包含一组感兴趣的令牌的字节 -我的输入在逻辑上分为这些块的组)。
一组完整的块可能包含 500 个块,我想将其压缩为一个 bzip2 流并写入标准输出。
在一组中,使用我在下面概述的伪代码,如果我的示例缓冲区一次能够容纳 101 个块,我将打开一个新流,在 101、101、101、101 和最后一次运行中压缩 500 个块关闭流的 96 个块。
问题
问题是我的bz_stream
结构实例,它在例程的单次传递中跟踪压缩字节的数量BZ2_bzCompress()
,似乎声称写入的压缩字节比最终压缩文件中的总字节多。
例如,压缩输出可能是一个真实大小为 1234 字节的文件,而报告的压缩字节数(我在调试时跟踪)略高于 1234 字节(比如 2345 字节)。
我的粗略伪代码分为两部分。
第一部分是我为压缩块子集所做的工作的粗略草图(我知道在此之后还有另一个子集):
现在我们总结输出:
问题
- 我是否计算
cumulativeBytesWritten
(或者,特别是bzBytesWritten
)不正确,我将如何解决这个问题?
我一直在调试版本中跟踪这些值,我似乎没有“重复计算”这些bzBytesWritten
值。cumulativeBytesWritten
每次成功BZ2_bzCompress()
通过后,都会对该值进行计数并使用一次以递增。
- 或者,我是否不了解
bz_stream
状态标志的正确使用?
例如,只要我继续发送一些字节,以下内容是否会压缩并保持 bzip2 流打开?
同样,以下语句是否可以压缩数据,只要至少有一些字节可从bzStream.next_in
指针(BZ_RUN
)访问,然后当没有更多可用字节时(BZ_FINISH
)结束流?
- 或者,我根本没有正确使用这些低级调用?我应该回到使用更高级别的调用来不断地将一组压缩的数据块附加到一个主文件吗?
对此可能有一个简单的解决方案,但是在调试可能出现的问题的过程中,我已经在桌面上敲了几天的头,而且我没有取得太大进展。谢谢你的任何建议。
java - 将 Java 解密代码迁移到 Golang
在过去的几天里,我一直在努力将 Java 代码迁移到 Golang,现在我陷入了困境。这是有效的 Java 代码:
我在 Golang 中的实现:
到目前为止我所知道的:
- 省略的所有错误值
_
都nil
在这段代码中 - 必须省略 bzip2 标头(“BZ”)
CBzip2InputStream
,但不能bzip2.NewReader
- 从 Java 和 golang 中读取的前 16 个字节
instream
是相同的,从第 17 个字节开始所有字节因任何原因而不同
linux - 如何使用 awk 压缩文件
如何更改压缩文件的以下命令?
该命令适用于普通文件。我需要更改压缩文件的命令。
python - Can't open bz2-compressed (with python) file with normal archive manager
I've written some code to bz2-compress a file with the BZ2 Compressor Object:
I don't get an error and the file is created, but when I want to open it with an archive manager, I get a nonspecific error. I can't find my mistake and this module is poorly documented.