这与之前的问题类似,但那里的答案不能满足我的需求,我的问题略有不同:
我目前对一些包含排序数据的非常大的文件使用gzip压缩.当文件未被压缩时,二进制搜索是支持在排序数据中寻找位置的便捷有效方式.
但是当文件被压缩时,事情变得棘手.我最近发现了zlib的Z_FULL_FLUSH选项,可以在压缩过程中使用它在压缩输出中插入"同步点"(inflateSync()然后可以从文件中的各个点开始读取).这是可以的,虽然我已经拥有的文件必须重新压缩才能添加此功能(奇怪的gzip是没有这个选项,但如果必须,我愿意编写自己的压缩程序).
从一个来源看来,即使Z_FULL_FLUSH不是一个完美的解决方案......不仅所有gzip档案都不支持它,而且在档案中检测同步点的想法可能会产生误报(或者与同步的幻数重合)点,或由于Z_SYNC_FLUSH也产生同步点但它们不能用于随机访问的事实.
有更好的解决方案吗?如果可能的话,我想避免使用辅助文件进行索引,并且对准随机访问的显式默认支持将是有帮助的(即使它是大粒度的 - 就像能够以每10 MB的间隔开始读取一样).是否有另一种压缩格式比gzip更好地支持随机读取?
编辑:正如我所提到的,我希望在压缩数据中进行二进制搜索.我不需要寻找特定的(未压缩的)位置 - 只是在压缩文件中寻找一些粗粒度.我只是希望能够支持诸如"将数据从大约50%(25%,12.5%等)开始压缩到此压缩文件中".
我正在与服务器连接,该服务器要求发送给它的数据使用Deflate算法(Huffman编码+ LZ77)进行压缩,并且还发送我需要的数据以进行Inflate.
我知道Python包含Zlib,并且Zlib中的C库支持对Inflate和Deflate的调用,但这些显然不是由Python Zlib模块提供的.它提供压缩和解压,但是当我拨打电话,如下列:
result_data = zlib.decompress( base64_decoded_compressed_string )
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Error -3 while decompressing data: incorrect header check
Run Code Online (Sandbox Code Playgroud)
Gzip并没有更好; 在打电话时如:
result_data = gzip.GzipFile( fileobj = StringIO.StringIO( base64_decoded_compressed_string ) ).read()
Run Code Online (Sandbox Code Playgroud)
我收到错误:
IOError: Not a gzipped file
Run Code Online (Sandbox Code Playgroud)
这是有道理的数据是平减文件不是真正的Gzip压缩文件.
现在我知道有一个Deflate实现可用(Pyflate),但我不知道Inflate的实现.
似乎有几个选择:
我正在寻求解决方案,但缺乏解决方案,我将感谢见解,建设性意见和想法.
附加信息:为了我需要的目的,放松(和编码)字符串的结果应该与下面的C#代码片段给出相同的结果,其中输入参数是与要压缩的数据相对应的UTF字节数组:
public static …Run Code Online (Sandbox Code Playgroud) 我有一个gzip文件,我试图通过Python读取它,如下所示:
import zlib
do = zlib.decompressobj(16+zlib.MAX_WBITS)
fh = open('abc.gz', 'rb')
cdata = fh.read()
fh.close()
data = do.decompress(cdata)
Run Code Online (Sandbox Code Playgroud)
它会抛出此错误:
zlib.error: Error -3 while decompressing: incorrect header check
Run Code Online (Sandbox Code Playgroud)
我怎么能克服它?
Zlib :: GzipReader可以采用"IO或IO类对象".正如它的输入,如文档中所述.
Zlib::GzipReader.open('hoge.gz') {|gz|
print gz.read
}
File.open('hoge.gz') do |f|
gz = Zlib::GzipReader.new(f)
print gz.read
gz.close
end
Run Code Online (Sandbox Code Playgroud)
我应该如何解开字符串?
首先,请耐心等待.我很难告诉别人我的问题,这是一个很长的线索......
我正在使用pythonbrew在Ubuntu 10.10中运行多个版本的python.有关安装pythonbrew及其工作原理,请参阅下面的链接
在阅读了几个stackoverflow线程后,我终于在这个目录下找到了名为Setup的文件: 〜/ .pythonbrew/pythons/Python-2.7.1/lib/python2.7/config
In this Setup file I see
# Andrew Kuchling's zlib module.
# This require zlib 1.1.3 (or later).
# See http://www.gzip.org/zlib/
# zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
Run Code Online (Sandbox Code Playgroud)
我取消注释最后一行,然后我再次运行python -v.但是,当我尝试导入zlib时,我收到了同样的错误,所以我想我必须做一些事情来将zlib安装到lib中.
但我对自己需要做的事情一无所知.有人可以指导我朝正确的方向??? 非常感谢你!
我这样做是因为我想在我创建的不同virtualenv中使用不同版本的python.当我做virtualenv -p python2.7时,我没有 收到名为zlib的模块.
jwxie518@jwxie518-P5E-VM-DO:~$ virtualenv -p python2.7 --no-site-packages testenv
Running virtualenv with interpreter /home/jwxie518/.pythonbrew/pythons/Python-2.7.1/bin/python2.7
Traceback (most recent call last):
File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 17, in <module>
import zlib
ImportError: No module named zlib
Run Code Online (Sandbox Code Playgroud)
编辑
我必须通过附加--force来安装2.7.1.
我正在开发Django,我需要一些这些缺少的模块,例如sqlite3,并创建我的virtualenv我绝对需要zlib.如果我只使用系统默认值(2.6.6),我没有问题. …
我想从互联网上下载一个zip文件并将其解压缩到内存而不保存到临时文件.我怎样才能做到这一点?
这是我尝试过的:
var url = 'http://bdn-ak.bloomberg.com/precanned/Comdty_Calendar_Spread_Option_20120428.txt.zip';
var request = require('request'), fs = require('fs'), zlib = require('zlib');
request.get(url, function(err, res, file) {
if(err) throw err;
zlib.unzip(file, function(err, txt) {
if(err) throw err;
console.log(txt.toString()); //outputs nothing
});
});
Run Code Online (Sandbox Code Playgroud)
[编辑]正如,建议,我尝试使用adm-zip库,我仍然无法使这项工作:
var ZipEntry = require('adm-zip/zipEntry');
request.get(url, function(err, res, zipFile) {
if(err) throw err;
var zip = new ZipEntry();
zip.setCompressedData(new Buffer(zipFile.toString('utf-8')));
var text = zip.getData();
console.log(text.toString()); // fails
});
Run Code Online (Sandbox Code Playgroud) 是否有一个简单的示例,说明如何解压缩.zip文件并将文件解压缩到目录?我目前正在使用zlib,虽然我知道zlib没有直接处理zip文件,但在zlibs的"contrib"库中似乎还有其他一些东西.我注意到并阅读了"minizip",在阅读了一些文档并查看了一些代码之后,我没有看到如何解压缩.zip文件并将文件解压缩到目录的简单示例.
我想找到一种独立于平台的方式,但如果不可能,那么我需要为windows和mac找到一种方法.
尝试使用自制软件在mac os x mavericks上安装zlib-devel不起作用:
brew install zlib-devel
Error: No available formula for zlib-devel
Searching taps...
Run Code Online (Sandbox Code Playgroud)
这个安装
brew install zlib
Run Code Online (Sandbox Code Playgroud)
虽然工作得很好.
如何在OSX中运行此命令?
dd if=mybackup.ab bs=24 skip=1|openssl zlib -d > mybackup.tar
当我运行这个时,我得到以下错误
$ dd if=mybackup.ab bs=24 skip=1|openssl zlib -d > mybackup.tar
dd: mybackup.ab: No such file or directory
openssl:Error: 'zlib' is an invalid command.
Standard commands
asn1parse ca ciphers crl crl2pkcs7
dgst dh dhparam dsa dsaparam
ec ecparam enc engine errstr
gendh gendsa genrsa nseq ocsp
passwd pkcs12 pkcs7 pkcs8 prime
rand req rsa rsautl s_client
s_server s_time sess_id smime speed
spkac verify version x509
Message Digest commands (see the `dgst' command …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用pyenv在我的MBP上并行安装Python 2.7.5和3.6.5.
pyenv 安装以下如何使用Homebrew在Mac上安装Python 2和3?, 我试过了:
$ pyenv install 3.6.5
Run Code Online (Sandbox Code Playgroud)
哪个错误:
python-build: use openssl from homebrew
python-build: use readline from homebrew
Downloading Python-3.6.5.tar.xz...
-> https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz
Installing Python-3.6.5...
python-build: use readline from homebrew
BUILD FAILED (OS X 10.13.4 using python-build 20160602)
Inspect or clean up the working tree at /var/folders/d0/t8d3jjp161g2dyrd4k67ypc80000gn/T/python-build.20180426091253.34709
Results logged to /var/folders/d0/t8d3jjp161g2dyrd4k67ypc80000gn/T/python-build.20180426091253.34709.log
Last 10 log lines:
File "/private/var/folders/d0/t8d3jjp161g2dyrd4k67ypc80000gn/T/python-build.20180426091253.34709/Python-3.6.5/Lib/ensurepip/__main__.py", line 5, in <module>
sys.exit(ensurepip._main())
File "/private/var/folders/d0/t8d3jjp161g2dyrd4k67ypc80000gn/T/python-build.20180426091253.34709/Python-3.6.5/Lib/ensurepip/__init__.py", line 204, in _main
default_pip=args.default_pip,
File "/private/var/folders/d0/t8d3jjp161g2dyrd4k67ypc80000gn/T/python-build.20180426091253.34709/Python-3.6.5/Lib/ensurepip/__init__.py", line 117, in …Run Code Online (Sandbox Code Playgroud) zlib ×10
gzip ×3
python ×3
compression ×2
macos ×2
unzip ×2
zip ×2
archive ×1
c# ×1
c++ ×1
homebrew ×1
javascript ×1
node.js ×1
openssl ×1
pyenv ×1
ruby ×1
ubuntu-10.10 ×1
virtualenv ×1
xcode ×1