admin 管理员组文章数量: 1184232
网络下载的视频文件通常都是压缩文件,以 rar 格式诸多。为了方便在 Android 系统中播放,所以想一次性将某个文件夹的文件全部解压。以下代码能对 rar, zip, gz, tgz 和 tar 格式且没有密码的文件进行解压。
安装相关库
需要安装第三方库 unrar 和 rarfile,都可以用 pip 命令安装:
pip install rarfile
pip install unrar
在安装这两个第三方库以后,还需要在操作系统中安装执行 rar 解压的依赖文件。以 Windows 系统为例,先到 RARLab 官方下载库文件 ,这是一个压缩包,双击解压,使用默认的安装位置:C:\Program Files (x86)\UnrarDLL。
解压后,根据操作系统的位置,配置环境变量。进入 UnrarDLL 文件夹,可以看到文件夹下有一个 UnRAR.dll 文件,在文件夹下有一个 x64 文件夹,里面放的是 64 位的文件。根据操作系统的版本,配置一个名为 UNRAR_LIB_PATH 的环境变量:
代码
import gzip
import os
import tarfile
import zipfile
from unrar import rarfile
defdecompress_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
defdecompress_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
defdecompress_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
defdecompress_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
defdecompress(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)defdecompress_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)ifnot 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)利用 winrar 软件进行解压
winrar 提供命令行解压,Python 语言可以调用 winrar 命令。在执行命令之前,把 winrar.exe 所在的路径加到环境变量。然后,比如,我们要把 D:\test 下所有 zip 文件解压,可以用下面的命令:
winrar.exe x D:\test\*.zip D:\test\unzip\
winrar 的命令行参数很多,这里不展开,x 表示使用绝对路径进行解压。Python 对 winrar 命令进行封装的代码如下:
import os
defunzip_folder(sourcepath):if sourcepath[-1:]=="\\":
files = sourcepath +"*.zip"else:
files = sourcepath +"\\"+"*.zip"
dest = sourcepath +"\\unzip\\"
cmd ='WinRAR.exe x {} {}'.format(files, dest)
os.system(cmd)if __name__ =="__main__":
source_folder = r"D:\test\\"
unzip_folder(source_folder)版权声明:本文标题:学会这招!用Python巧解压SWF文件,深入Adobe Flash Player世界 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1771437697a3544613.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论