美文网首页
Python解压常见格式的压缩文件

Python解压常见格式的压缩文件

作者: Stone0823 | 来源:发表于2019-12-06 16:12 被阅读0次

    网络下载的视频文件通常都是压缩文件,以 rar 格式诸多。为了方便在 Android 系统中播放,所以想一次性将某个文件夹的文件全部解压。以下代码能对 rar, zip, gz, tgz 和 tar 格式且没有密码的文件进行解压。unrar 是第三方库,可以通过 pip 安装。

    import gzip
    import os
    import tarfile
    import zipfile
    from unrar import rarfile
    
    def decompress_rar(src_file, dest_dir):
        """
        Decompress rar file into destination direction
        """
        rv = (True, '')
    
        try:
            rar = rarfile.RarFile(src_file)
            rar.extractall(dest_dir)
        except Exception as e:
            rv = (False, e)
            return rv
    
        return rv
    
    
    def decompress_tar_and_tgz(src_file, dest_dir):
        """
        Decomporess .tar or .tgz file into destination directory
        """
        rv = (True, '')
        try:
            tar = tarfile.open(src_file)
            names = tar.getnames()
            for name in names:
                tar.extract(name, dest_dir)
            tar.close()
        except Exception as e:
            rv = (False, e)
            return rv
    
        return rv
    
    
    def decompress_zip(src_file, dest_dir):
        """
        Decompress .zip file into destination folder
        """
        rv = (True, '')
        try:
            zip_file = zipfile.ZipFile(src_file)
            for name in zip_file.namelist():
                zip_file.extract(name, dest_dir)
            zip_file.close()
        except Exception as e:
            rv = (False, e)
            return rv
        
        return rv
    
    def decompress_gz(src_file, dest_dir):
        """
        Decompress .gz file into destination folder
        """
        rv = (True, "")
        try:
            fname = dest_dir + '/' + os.path.basename(src_file)
            gfile = gzip.GzipFile(src_file)
            open(fname, "w+").write(gfile.read())
            gfile.close()
        except Exception as e:
            rv = (False, e)
            return rv
    
        return rv
    
    
    def decompress(src_file, dest_dir):
        fname, ext = os.path.splitext(src_file)
    
        if ext in ('.tgz', '.tar'):
            decompress_tar_and_tgz(src_file, dest_dir)
        elif ext == '.zip':
            decompress_zip(src_file, dest_dir)        
        elif ext == '.rar':
            decompress_rar(src_file, dest_dir)
        elif ext == '.gz':
            decompress_gz(src_file, dest_dir)
    
    
    def decompress_folder(src_dir):
        files = os.listdir(src_dir)
    
        for fname in files: # fname is file name with extension
            name, ext = os.path.splitext(fname) # name is file name without extension
            src_file = os.path.join(src_dir, fname)
            dest_path = os.path.join(src_dir, name)
            if not os.path.exists(dest_path):
                os.mkdir(dest_path)
    
            decompress(src_file, dest_path)
            print(src_file, 'was decompressed.')
    
    
    if __name__ == '__main__':
        src_dir = r'D:\some_folder_name'
        decompress_folder(src_dir)
    
    

    相关文章

      网友评论

          本文标题:Python解压常见格式的压缩文件

          本文链接:https://www.haomeiwen.com/subject/ureegctx.html