加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_汕头站长网 (https://www.0754zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

几种不同压缩与解压缩格式,Python都可以

发布时间:2022-10-31 13:18:38 所属栏目:Linux 来源:
导读:  大家好,我是坤哥~

  在日常工作中linux压缩,除了会涉及到使用Python处理文本文件,有时候还会涉及对压缩文件的处理。

  通常会涉及到的压缩文件格式有:

  当然除了使用Python外,你还可以选
  大家好,我是坤哥~
 
  在日常工作中linux压缩,除了会涉及到使用Python处理文本文件,有时候还会涉及对压缩文件的处理。
 
  通常会涉及到的压缩文件格式有:
 
  当然除了使用Python外,你还可以选择使用压缩解压缩软件或命令手动进行处理。
 
  zip文件
 
  zipfile是Python里用来做zip格式编码的压缩和解压缩的module,zipfile里有两个非常重要的class:ZipFile和ZipInfo。ZipFile是主要的类,用来创建和读取zip文件,而ZipInfo是存储的zip文件的每个文件的信息。
 
  示例代码:
 
  import osimport zipfile# 压缩def make_zip(source_dir, output_filename): zipf = zipfile.ZipFile(output_filename, 'w') pre_len = len(os.path.dirname(source_dir)) for parent, dirnames, filenames in os.walk(source_dir):for filename in filenames:print(filename)pathfile = os.path.join(parent, filename)arcname = pathfile[pre_len:].strip(os.path.sep) # 相对路径zipf.write(pathfile, arcname)print() zipf.close()# 解压缩def un_zip(file_name): """unzip zip file""" zip_file = zipfile.ZipFile(file_name) if os.path.isdir(file_name + "_files"):pass else:os.mkdir(file_name + "_files") for names in zip_file.namelist():zip_file.extract(names, file_name + "_files/") zip_file.close()if __name__ == '__main__': make_zip(r"E:python_samplelibstest_tar_fileslibs", "test.zip") un_zip("test.zip")
 
  tar.gz文件
 
  tarfile 模块可以用来读写 tar 归档,包括使用 gzip, bz2 和 lzma 压缩的归档。在使用tarfile是必须了解模式:
 
  mode 必须是 ‘filemode[:compression]’ 形式的字符串,其默认值为 ‘r’。以下是模式组合的完整列表:
 
  针对特殊的目的,还存在第二种 mode 格式: ‘filemode|[compression]’。tarfile.open() 将返回一个将其数据作为数据块流来处理的 TarFile 对象:
 
  代码示例:
 
  import osimport tarfileimport gzip# 一次性打包整个根目录。空子目录会被打包。# 如果只打包不压缩,将"w:gz"参数改为"w:"或"w"即可。def make_targz(output_filename, source_dir): with tarfile.open(output_filename, "w:gz") as tar:tar.add(source_dir, arcname=os.path.basename(source_dir))# 逐个添加文件打包,未打包空子目录。可过滤文件。# 如果只打包不压缩,将"w:gz"参数改为"w:"或"w"即可。def make_targz_one_by_one(output_filename, source_dir): tar = tarfile.open(output_filename, "w:gz") for root, dir, files in os.walk(source_dir):for file in files:pathfile = os.path.join(root, file)tar.add(pathfile) tar.close()def un_gz(file_name): """ungz zip file""" f_name = file_name.replace(".gz", "") # 获取文件的名称,去掉 g_file = gzip.GzipFile(file_name) # 创建gzip对象 open(f_name, "wb+").write(g_file.read()) # gzip对象用read()打开后,写入open()建立的文件里。
 
  g_file.close() # 关闭gzip对象def un_tar(file_name): # untar zip file tar = tarfile.open(file_name) names = tar.getnames() if os.path.isdir(file_name + "_files"):pass else:os.mkdir(file_name + "_files") # 由于解压后是许多文件,预先建立同名文件夹 for name in names:tar.extract(name, file_name + "_files/") tar.close()if __name__ == '__main__': make_targz('test.tar.gz', "E:python_samplelibs") make_targz_one_by_one('test01.tgz', "E:python_samplelibs") un_gz("test.tar.gz") un_tar("test.tar")
 
  rar文件
 
  我们可以使用rarfile来解压.rar的文件,但是不支持用rarfile来压缩rar文件。rarfile以下unrar组件,但是使用pip install unrar安装后发现会报如下错误:
 
  Couldn’t find path to unrar library…
 
  这是因为 Python下的 unrar 还依赖了RAR官方的库。
 
  Windows的安装
 
  Linux的安装
 
  # cd /usr/local/src/# wget # tar zxvf unrarsrc-6.0.3.tar.gz# cd unrar# make lib# make install-lib //生成libunrar.so 文件# vim /etc/profileexport UNRAR_LIB_PATH=/usr/lib/libunrar.so# source /etc/profile
 
  代码示例:
 
  import rarfiledef unrar(rar_file, dir_name): # rarfile需要unrar支持, linux下pip install unrar, windows下在winrar文件夹找到unrar,加到path里 rarobj = rarfile.RarFile(rar_file.decode('utf-8')) rarobj.extractall(dir_name.decode('utf-8'))
 
  7z文件
 
  要压缩和解压缩.7z文件需要用到py7zr组件。代码示例:
 
  import py7zr# 压缩with py7zr.SevenZipFile("Archive.7z", 'w') as archive: archive.writeall("target/")# 解压缩with py7zr.SevenZipFile("Archive.7z", 'r') as archive:archive.extractall(path="/tmp")
 
  欢迎扫码与我交流- EOF -觉得本文对你有帮助?
 

(编辑:云计算网_汕头站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!