­

python tar.gz格式壓縮、解壓

  • 2020 年 2 月 18 日
  • 筆記

一、壓縮

需求描述

現在有一個目錄,需要將此目錄打包成tar.gz文件。因為有一個Django項目,需要用到此功能!

tar.gz

目錄結構如下:

./├── folder  │   ├── 1.doc  │   └── 2.txt  └── packing.py

packing.py 是python程式,需要將folder目錄打包成tar.gz文件

packing.py 內容如下:

#!/usr/bin/env python3  # coding: utf-8  import os, tarfile    def make_targz(output_filename, source_dir):      """      一次性打包目錄為tar.gz      :param output_filename: 壓縮文件名      :param source_dir: 需要打包的目錄      :return: bool      """      try:          with tarfile.open(output_filename, "w:gz") as tar:              tar.add(source_dir, arcname=os.path.basename(source_dir))            return True      except Exception as e:          print(e)          return False    make_targz('aa.tar.gz','folder')

注意:

空子目錄會被打包,如果只打包不壓縮,將"w:gz"參數改為"w:"或"w"即可。

執行程式,會在當前目錄下生成aa.tar.gz文件 

二、解壓

def untar(fname, dirs):      """      解壓tar.gz文件      :param fname: 壓縮文件名      :param dirs: 解壓後的存放路徑      :return: bool      """      try:          t = tarfile.open(fname)          t.extractall(path = dirs)          return True      except Exception as e:          print(e)          return False    untar('aa.tar.gz','./')

完整程式碼如下:

#!/usr/bin/env python3  # coding: utf-8  import os, tarfile    def make_targz(output_filename, source_dir):      """      一次性打包目錄為tar.gz      :param output_filename: 壓縮文件名      :param source_dir: 需要打包的目錄      :return: bool      """      try:          with tarfile.open(output_filename, "w:gz") as tar:              tar.add(source_dir, arcname=os.path.basename(source_dir))            return True      except Exception as e:          print(e)          return False      def untar(fname, dirs):      """      解壓tar.gz文件      :param fname: 壓縮文件名      :param dirs: 解壓後的存放路徑      :return: bool      """      try:          t = tarfile.open(fname)          t.extractall(path = dirs)          return True      except Exception as e:          print(e)          return False    # make_targz('aa.tar.gz','folder')  untar('aa.tar.gz','./')

執行程式,就會將aa.tar.gz解壓到當前文件夾下

三、壓縮原理

把文件的二進位程式碼壓縮,把相鄰的0,1程式碼減少,比如有000000,可以把它變成6個0 的寫法60,來減少該文件的空間。

由於電腦處理的資訊是以二進位數的形式表示的,因此壓縮軟體就是把二進位資訊中相同的字元串以特殊字元標記來達到壓縮的目的。為了有助於理解文件壓縮,請在腦海里想像一幅藍天白雲的圖片。對於成千上萬單調重複的藍色像點而言,與其一個一個定義「藍、藍、藍……」長長的一串顏色,還不如告訴電腦:「從這個位置開始存儲1117個藍色像點」來得簡潔,而且還能大大節約存儲空間。這是一個非常簡單的影像壓縮的例子。其實,所有的電腦文件歸根結底都是以「1」和「0」的形式存儲的,和藍色像點一樣,只要通過合理的數學計算公式,文件的體積都能夠被大大壓縮以達到「數據無損稠密」的效果。總的來說,壓縮可以分為有損和無損壓縮兩種。如果丟失個別的數據不會造成太大的影響,這時忽略它們是個好主意,這就是有損壓縮。有損壓縮廣泛應用於動畫、聲音和影像文件中,典型的代表就是影碟文件格式mpeg、音樂文件格式mp3和影像文件格式jpg。但是更多情況下壓縮數據必須準確無誤,人們便設計出了無損壓縮格式,比如常見的zip、rar等。壓縮軟體(compression software)自然就是利用壓縮原理壓縮數據的工具,壓縮後所生成的文件稱為壓縮包(archive),體積只有原來的幾分之一甚至更小。當然,壓縮包已經是另一種文件格式了,如果想使用其中的數據,首先得用壓縮軟體把數據還原,這個過程稱作解壓縮。常見的壓縮軟體有winzip、winrar等。

本文參考鏈接:

https://www.cnblogs.com/liangqihui/p/9219333.html

https://www.cnblogs.com/kaituorensheng/p/4493145.html