python tar.gz格式壓縮、解壓

1、壓縮

需求描述

如今有一個目錄,須要將此目錄打包成tar.gz文件。由於有一個Django項目,須要用到此功能!html

tar.gz

目錄結構以下:python

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

 

packing.py 是python程序,須要將folder目錄打包成tar.gz文件ide

 

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"便可。ui

 

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

 

2、解壓

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','./')
View Code

 

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

 

3、壓縮原理

把文件的二進制代碼壓縮,把相鄰的0,1代碼減小,好比有000000,能夠把它變成6個0 的寫法60,來減小該文件的空間。htm

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

 

本文參考連接:

http://www.javashuo.com/article/p-unsbotdf-cy.html

http://www.javashuo.com/article/p-qqmqbzlv-db.html

相關文章
相關標籤/搜索