在Python 3中使用带有多个文件的存档的gzip

时间:2018-06-03 16:55:05

标签: python python-3.x character-encoding gzip compression

所以基本上我有一个像这样的文件系统:

$ajaxJs = <<< JS
function(e) {
    doc = new DOMParser().parseFromString(`<li class="p1 mb1 blue bg-white">${e.currentTarget.options[e.currentTarget.options.selectedIndex].text}</li>`, "text/html").body.firstChild;
    document.querySelector('.js-sortable-buttons').appendChild(doc);
}
JS;    

此存档中有数百个文件...基本上,yii2-sortable包可以与Python 3中的多个文件一起使用吗?我只使用压缩的单个文件,因此我不知道如何浏览多个文件或多个级别的&#34;压缩&#34;。

我通常的解压缩方法是:

// Select the node that will be observed for mutations
var targetNode = document.getElementById('some-id');

// Options for the observer (which mutations to observe)
var config = { attributes: true, childList: true };

// Callback function to execute when mutations are observed
var callback = function(mutationsList) {
    for(var mutation of mutationsList) {
        if (mutation.type == 'childList') {
            console.log('A child node has been added or removed.');
        }
        else if (mutation.type == 'attributes') {
            console.log('The ' + mutation.attributeName + ' attribute was modified.');
        }
    }
};

// Create an observer instance linked to the callback function
var observer = new MutationObserver(callback);

// Start observing the target node for configured mutations
observer.observe(targetNode, config);

// Later, you can stop observing
observer.disconnect();

当然,这有很多问题,因为通常&#34; f&#34;只是一个文件...但是现在我不确定它代表什么?

非常感谢任何帮助/建议!

编辑1:

我已经接受了以下答案,但如果您正在寻找类似的代码,我的骨干基本上就是:

main_archive.tar.gz
  main_archive.tar
    sub_archive.xml.gz
      actual_file.xml

使用的主要包是gzipwith gzip.open(file_path, "rb") as f: for ln in f.readlines(): *decode encoding here* tar = tarfile.open(file_path, mode="r") for member in tar.getmembers(): f = tar.extractfile(member) if verbose: print("Decoding", member.name, "...") with gzip.open(f, "rb") as temp: decoded = temp.read().decode("UTF-8") e = xml.etree.ElementTree.parse(decoded).getroot() for child in e: print(child.tag) print(child.attrib) print("\n\n") tar.close()

2 个答案:

答案 0 :(得分:1)

gzip仅支持压缩单个文件或流。在您的情况下,exrtacted流是tar对象,因此您使用Python tarfile library来操作提取的内容。该库实际上知道如何应对.tar.gz,因此您不需要自己明确提取gzip

答案 1 :(得分:0)

使用Python的tarfile获取包含的文件,然后在循环内再次使用Python的gzip来提取xml。