Python-识别压缩文件类型并解压缩的机制

发布于 2021-01-29 17:07:02

压缩文件可以分为以下逻辑组
a。您正在使用的操作系统(* ix,Win)等
。不同类型的压缩算法(即.zip,.z,.bz2,.rar,.gzip)。从最常用的压缩文件的标准列表中了解。
C。然后我们有了tar球机制-我想这里没有压缩。但这更像是串联。

现在,如果我们开始处理以上压缩文件集,请执行以下操作
:选项(a)将由python处理,因为它是平台无关的语言。
b。选项(b)和(c)似乎有问题。

我需要
什么我该如何识别文件类型(压缩类型)然后对其进行UN压缩?


喜欢:

fileType = getFileType(fileName)  
switch(fileType):  
case .rar:  unrar....
case .zip:  unzip....

etc

因此,基本问题是如何基于文件识别压缩算法(假设未提供扩展名或扩展名不正确)?在python中有什么特定的方法吗?

关注者
0
被浏览
159
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    此页面具有“魔术”文件签名列表。抓住您需要的内容,并将其放入如下所示的字典中。然后,我们需要一个将dict键与文件开头相匹配的函数。我已经写了一个建议,尽管可以通过将其预处理magic_dict为一个巨大的编译正则表达式进行优化。

    magic_dict = {
        "\x1f\x8b\x08": "gz",
        "\x42\x5a\x68": "bz2",
        "\x50\x4b\x03\x04": "zip"
        }
    
    max_len = max(len(x) for x in magic_dict)
    
    def file_type(filename):
        with open(filename) as f:
            file_start = f.read(max_len)
        for magic, filetype in magic_dict.items():
            if file_start.startswith(magic):
                return filetype
        return "no match"
    

    该解决方案应该是跨平台的,并且当然不依赖于文件扩展名,但是对于具有随机内容且恰好以某些特定魔术字节开头的文件,它可能会带来误报。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看