1

Python 2.7 で一時ファイルを保存せずに、URL から gzip ファイルを読み込もうとしています。ただし、何らかの理由で、切り捨てられたテキスト ファイルが表示されます。私は成功せずに解決策をネットで検索するのにかなりの時間を費やしました。「生の」データを gzip ファイルに保存すると、切り捨ては発生しません (以下のサンプル コードを参照)。私は何を間違っていますか?

私のコード例:

    import urllib2
    import zlib
    from StringIO import StringIO

    url = "ftp://ftp.ncbi.nih.gov/snp/organisms/human_9606/VCF/clinvar_00-latest.vcf.gz"

    # Create a opener
    opener = urllib2.build_opener() 

    request = urllib2.Request(url)
    request.add_header('Accept-encoding', 'gzip')

    # Fetch the gzip filer
    respond = opener.open(request)
    compressedData = respond.read()
    respond.close()

    opener.close()

    # Extract data and save to text file
    compressedDataBuf = StringIO(compressedData)
    d = zlib.decompressobj(16+zlib.MAX_WBITS)

    buffer = compressedDataBuf.read(1024)
    saveFile = open('/tmp/test.txt', "wb")
    while buffer:
        saveFile.write(d.decompress(buffer))
        buffer = compressedDataBuf.read(1024)
    saveFile.close()

    # Save "raw" data to new gzip file.
    saveFile = open('/tmp/test.gz', "wb")
    saveFile.write(compressedData)
    saveFile.close()
4

1 に答える 1

0

その gzip ファイルは、RFC 1952 で許可されているように、多数の連結された gzip ストリームで構成されているためです。gzip は、すべての gzip ストリームを自動的に解凍します。

各 gzip ストリームの終わりを検出し、後続の圧縮データで解凍を再開する必要があります。unused_dataPythonのドキュメントを見てください。

于 2013-08-12T05:37:50.353 に答える