Python:如何在压缩文件中加载特定压缩文件的缓冲区对象?

时间:2015-02-05 20:53:03

标签: python scipy gzip tarfile

我有一个tar.bz2,里面有一个特定的.gz文件列表。在tar.bz2中搜索并找到.gz文件后,我想将这些特定的.gz文件加载到缓冲区。然后我想解压缩那些加载的.gz文件。最后,我想将解压缩的.gz文件作为.mat文件加载。我想这样做而不必生成外部文件。

注意:.gz压缩文件只是一个.mat文件,而不是压缩文件的进一步列表。

为了说明压缩架构: big_file.tar.bz2 - > cat.gz,dog.gz,hello.gz,hello1.gz hello.gz - >你好(单个.mat文件)

tar.bz2中的匹配文件名为'hello',如标记为'hello.gz',hello1.gz',...等的文件。

我目前的问题是我在tar_bz2.extractfile()之后无法正确获取缓冲区格式。

来自snipet的错误是在loadmat()作为文件问题结束的搜索,但我确定我的问题的根源在tar_bz2.extractfile()之后开始。

这是我到目前为止所拥有的:

import tarfile
import gzip
from scipy.io import loadmat

def extract_mat_data(file):
    match_filename = 'hello'
    # Decompress tar.bz2
    mat_file_data = []
    with  tarfile.open(file,'r:bz2',errorlevel=1) as tar_bz2:
        # Loop over all the sub compressed files
        for file_ in tar_bz2:
            # Match only the files with the desired file name.
            if match_filename in file_.name:
                # Extract the match file into a buffer
                file_in_file = tar_bz2.extractfile(file_)
                # Extract the gz file from a buffer
                gz = gzip.GzipFile(fileobj=file_in_file.fileobj,mode='rb')
                # Load the mat format buffer object
                single_mat_data = loadmat(gz)
                # Create a list with the mat data
                mat_file_data.append(single_mat_data)
    return mat_file_data

file = 'big_file.tar.bz2'
extract_mat_data(file)

0 个答案:

没有答案