不确定如何从二进制文件中解压缩/读取结果

时间:2015-05-22 06:03:09

标签: python binary compression lzma

我尝试使用lzma从www.dukascopy.com解压缩文件(文件似乎是二进制的,它的.bi5格式)。它是EUR / USD货币对的外汇数据。对不起,但我对如何阅读二进制文件并不是很熟悉。我把它解压缩了吗?如果是这样,我应该如何转换我已解压缩的结果数据。

测试文件: https://dl.dropboxusercontent.com/u/11283578/00h_ticks.bi5

我的测试代码:

import lzma

with open('/Users/me/Downloads/dukascopy_php_scripts_v0.27/EURUSD/2008/05/16/00h_ticks.bi5','rb') as f:
    infile = f.read()

decompressor = lzma.LZMADecompressor()
print(lzma.decompress(infile))

打印哪些:

(starting with).....b'\x00\x00\x16\xd4\x00\x02X\xf6\x00\x02X\xe6@\x19\x99\x9a?\xe6ff\x00\x00 (\x00\x02X\xf7\x00\x02X\xe3A\x10\x00\x00@\x19\x99\x9a\x00\x00)c\x00\x02X\xed\x00\x02X\xe8@\xc0\x00\x00@\x9333\x00\x00.\x87\x00\x02X\xe9\x00\x02X\xe4@\x99\x99\x9a@\xc0\x00\x00\x00\x00.\xfa\x00\x02X\xe8\x00\x02X\xe3A\x10\x00\x00@\x19\x99\x9a\x00\x000N\x00\x02X\xe8\x00\x02X\xe3Aq\x99\x9a@\x99\x99\x9a\x00\x000\xc0\x00\x02X\xee\x00\x02X\xe4@\xc0\x00\x00?\xe6ff\x00\x001<\x00\x02X\xf4\x00\x02X\xeaA\x14\xcc\xcd@\x19\x99\x9a\x00\x001\xb3\x00\x02X\xf9\x00\x02X\xef@\xac\xcc\xcd@\xe6ff\x00\x002&\x00\x02X\xfb\x00\x02X\xf6@\x99\x99\x9a@\x19\x99\x9a\x00\x00T\xd7\x00\x02Y\x03\x00\x02X\xef@\x19\x99\x9a?\x99\x99\x9a\x00\x00U\x1b\x00\x02X\xfa\x00\x02X\xf5A\x14\xcc\xcd?\x80\x00\x00\x00\x00U?\x00\x02X\xf6\x00\x02X\xf1@\x99\x99\x9aAS33\x00\x00Uc\x00\x02X\xf3\x00\x02X\xe9@\x99\x99\x9a@\xac\xcc\xcd\x00\x00U\xef\x00\x02X\xe8\x00\x02X\xde@\x86ffA#33\x00\x00V\x13\x00\x02X\xdd\ ......(ending with)..... \x00\x02Y+\x00\x02Y!?\x80\x00\x00@\x99\x99\x9a'

1 个答案:

答案 0 :(得分:1)

您可以迭代解压缩文件,而无需将其完全读入内存,如下所示:

示例:

#!/usr/bin/env python

URL = "https://dl.dropboxusercontent.com/u/11283578/00h_ticks.bi5"

from requests import get
from lzma import LZMADecompressor

decompressor = LZMADecompressor()
response = get(URL, stream=True)

with open("foo.bin", "wb") as f:
    for chunk in response.iter_content(chunk_size=1024):
        if chunk:
            result = decompressor.decompress(chunk)
            if result != b"":
                f.write(result)

然后,我们可以通过将文件下载和解压缩与lzma命令行工具进行比较来确认并验证输出:

<强>输出:

$ python foo.py

$ curl -q -o - https://dl.dropboxusercontent.com/u/11283578/00h_ticks.bi5 | lzma -d - > test.bin
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 11600  100 11600    0     0   7509      0  0:00:01  0:00:01 --:--:--  7508

$ shasum foo.bin
c36d2314e43f3c71ad85e75e748b4f54edc8d74a  foo.bin

$ shasum test.bin
c36d2314e43f3c71ad85e75e748b4f54edc8d74a  test.bin

由于我没有与您同一个文件的本地访问权限,也没有相同的环境,上面的示例会下载您放在Dropbox上的文件并使用Python 3.4和lzma.LZMADecompressor迭代解压缩库/类。