Python解压缩,python读取压缩包文件

  Python解压缩,python读取压缩包文件

  在日常工作中,我们不仅用Python处理文本文件,有时也会处理压缩文件。本文总结了几个可以用Python实现的文件压缩和解压缩的代码,有需要的可以参考一下。

  

目录
zip文件tar.gz文件rar文件7z文件在日常工作中,除了使用Python处理文本文件,有时还会涉及到压缩文件的处理。

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

  Rar:压缩在Windows环境下被广泛使用。众所周知的GUI工具是winrartar: Linux系统下的打包工具。它只打包,不压缩gz:也就是gzip。通常,只能压缩一个文件。结合焦油,可以先打包再压缩。Tgz:即gz。先用tar打包再用gzip压缩得到的文件zip:与gzip不同的是,可以用类似的算法打包压缩多个文件,但单独压缩文件的压缩率比tar7z:7zip压缩软件支持的压缩率低,压缩效率更高。当然,除了使用Python,还可以选择使用压缩解压软件或者命令来手动处理。

  

zip文件

  Zipfile是Python中用于压缩和解压缩邮政编码的模块。zipfile中有两个非常重要的类:Zipfile和ZipInfo。ZipFile是主类,用来创建和读取zip文件,ZipInfo是每个存储的zip文件的信息。

  示例代码

  导入操作系统

  导入zip文件

  #压缩

  def make_zip(源目录,输出文件名):

  zipf=zipfile。ZipFile(输出文件名, w )

  pre _ len=len(OS . path . dirname(source _ dir))

  对于父目录,目录名,文件名在os.walk(source_dir):中

  对于文件名:中的文件名

  打印(文件名)

  pathfile=os.path.join(父级,文件名)

  Arc name=pathfile [pre _ len3360]。strip (os.path.sep) #相对路径

  zipf.write(路径文件,arcname)

  打印()

  zipf.close()

  #解压

  def un_zip(文件名):

  解压缩zip文件

  zip_file=zipfile。ZipFile(文件名)

  if os.path.isdir(文件名 _文件):

  及格

  else:

  os.mkdir(文件名 _文件)

  对于zip_file.namelist():中的名称

  zip_file.extract(names,file_name _files/)

  zip_file.close()

  if __name__==__main__:

  make _ zip(r e : python _ samplelibstest _ tar _ files libs , test.zip )

  un_zip(test.zip )

  

tar.gz文件

  Tarfile模块可以用来读写tar归档文件,包括gzip、bz2、lzma压缩的归档文件。使用tarfile时,您必须知道模式:

  模式必须是“filemode [:compression]”形式的字符串,其默认值为“r”。以下是模式组合3360的完整列表。

  打开和读取模式“r”或“r: *”使用透明压缩(推荐)。“R:”不使用压缩来打开和读取。

  td>‘r:gz’打开和读取使用gzip 压缩。‘r:bz2’打开和读取使用bzip2 压缩。‘r:xz’打开和读取使用lzma 压缩。‘x’或‘x:’创建tarfile不进行压缩。如果文件已经存在,则抛出 FileExistsError 异常。‘x:gz’使用gzip压缩创建tarfile。如果文件已经存在,则抛出 FileExistsError 异常。‘x:bz2’使用bzip2 压缩创建tarfile。如果文件已经存在,则抛出 FileExistsError 异常。‘x:xz’使用lzma 压缩创建tarfile。如果文件已经存在,则抛出 FileExistsError 异常。‘a’or‘a:’打开以便在没有压缩的情况下追加。如果文件不存在,则创建该文件。‘w’or‘w:’打开用于未压缩的写入。‘w:gz’打开用于 gzip 压缩的写入。‘w:bz2’打开用于 bzip2 压缩的写入。‘w:xz’打开用于 lzma 压缩的写入。

  针对特殊的目的,还存在第二种 mode 格式: ‘filemode[compression]’。tarfile.open() 将返回一个将其数据作为数据块流来处理的 TarFile 对象:

  模式动作‘r*’打开 tar 块的流以进行透明压缩读取。‘r’打开一个未压缩的 tar 块的 stream 用于读取。‘rgz’打开一个 gzip 压缩的 stream 用于读取。‘rbz2’打开一个 bzip2 压缩的 stream 用于读取。‘rxz’打开一个 lzma 压缩 stream 用于读取。‘w’打开一个未压缩的 stream 用于写入。‘wgz’打开一个 gzip 压缩的 stream 用于写入。‘wbz2’打开一个 bzip2 压缩的 stream 用于写入。‘wxz’打开一个 lzma 压缩的 stream 用于写入。

  代码示例:

  

import os

  import tarfile

  import 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的安装

  

  • 到RARLab官方下载库文件,然后安装。
  • 安装是最好选择默认路径,一般在 C:Program Files (x86)UnrarDLL 目录下。
  • 添加环境变量,在系统变量中新建变量名UNRAR_LIB_PATH,如果是64位系统,就输入 C:Program Files (x86)UnrarDLLx64UnRAR64.dll,如果是32位系统就是 C:Program Files (x86)UnrarDLLUnRAR.dll。
  • 确定保存环境变量后,在进行 pip install unrar 安装,这时代码再运行就不会报错了。

  Linux的安装

  

  • 下载rar源文件
  • 解压安装包,进入安装包目录,编译安装,生成so 文件
  • 配置环境变量,完成后,在进行 pip install unrar 安装

  

# cd /usr/local/src/

  # wget https://www.rarlab.com/rar/unrarsrc-6.0.3.tar.gz

  # tar zxvf unrarsrc-6.0.3.tar.gz

  # cd unrar

  # make lib

  # make install-lib //生成libunrar.so 文件

  # vim /etc/profile

  export UNRAR_LIB_PATH=/usr/lib/libunrar.so

  # source /etc/profile

  代码示例:

  

import rarfile

  def 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", r) as archive:

   archive.extractall(path="/tmp")

  # 解压缩

  with py7zr.SevenZipFile("Archive.7z", w) as archive:

   archive.writeall("target/")

  以上就是基于Python实现文件的压缩与解压缩的详细内容,更多关于Python文件压缩的资料请关注盛行IT软件开发工作室其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: