一、压缩

需求描述

现在有一个目录,需要将此目录打包成tar.gz文件。因为有一个Django项目,需要用到此功能!

tar.gz

目录结构如下:

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

packing.py 是python程序,需要将folder目录打包成tar.gz文件

packing.py 内容如下:

#!/usr/bin/env python3
# coding: utf-
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-
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

python tar.gz格式压缩、解压的更多相关文章

  1. [Linux] 解压tar.gz文件,解压部分文件

    遇到数据库无法查找问题原因,只能找日志,查找日志的时候发现老的日志都被压缩了,只能尝试解压了   数据量比较大,只能在生产解压了,再进行查找 文件名为*.tar.gz,自己博客以前记录过解压方法: h ...

  2. tar.gz,直接解压可用?还是需要编译安装?

    在linux搭建环境,下载的tar.gz安装包,有的直接解压就可以用,有的需要编译安装后才可用 怎么知道该怎么操作呢? 其实,tar -zxvf解压后,进入目录看README.md就知道答案了 另外, ...

  3. .tar.gz 和.tgz 解压

    wget   {url} 下载 eg: wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.24/bin/apac ...

  4. python对文件的压缩解压

    python自带的zipfile的模块支持对文件的压缩和解压操作 zipfilp.ZipFile 表示创建一个zip对象 zipfile.ZipFile(file[, mode[, compressi ...

  5. [Linux] 016 压缩解压命令

    1. 压缩解压命令:gzip 命令名称:gzip 命令所在路径:/bin/gzip 执行权限:所有用户 语法:gzip [文件] 功能描述:压缩文件 压缩后文件的格式:.gz 补充: 解压 .rar ...

  6. Linux常用命令6 压缩解压命令

    .zip是Linux和Windows共有的压缩格式 1.压缩解压命令:gzip 命令英文原意:GNU zip   命令所在路径:/bin/gzip 执行权限:所有用户 语法: gzip [文件]   ...

  7. php解压 tar.gz 格式文件

    1.运用php自带压缩与归档扩展(phar) $phar = new PharData('song.tar.gz'); //路径 要解压的文件 是否覆盖 $phar->extractTo('c: ...

  8. linux下tar压缩/解压的使用(tar) 压缩/解压

    压缩: tar  -zcvf   压缩后文件名.tar.gz   被压缩文件 解压: tar  -zxvf  被解压文件 具体的可以在linux环境下 用 tar --help 查看详细说明格式:ta ...

  9. linux中tar及压缩解压命令用法

    把常用的tar解压命令总结下,当作备忘: tar 命令可以为Linux的文件和目录创建档案.利用 tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向 档案中加入新的文件.t ...

随机推荐

  1. MyBatis关联查询,一对一关联查询

    数据库E-R关系 实体类 public class City { Long id; String name; Long countryId; Date lastUpdate; } public cla ...

  2. Django_博客_XSS 攻击防范

    背景: 博客项目中用户后台添加文章时,若通过富文本编辑器输入 标签内容或者 js 指令会导致文章排版错乱,甚至进行XSS攻击 攻击现象: 文本内容输入 js 指令 文章描述时正确显示其文本内容 但在打 ...

  3. c# DataGridView绑定DataTable对象之后总会多一行

    DataGridView 属性 AllowUserToAddRows = false

  4. linq 获取列表最大值

    string depth = formList.OrderByDescending(s => s.VersionId).FirstOrDefault().VersionId;

  5. MT【202】内准圆

    双曲线$\dfrac{x^2}{4}-\dfrac{y^2}{12}=1$ 的右焦点为 F,左准线为 L. 椭圆C 以F和L为其的焦点及准线,过F作一条斜率为 1 的直线交椭圆C于点A和B. 若椭圆C ...

  6. 【刷题】BZOJ 4059 [Cerc2012]Non-boring sequences

    Description 我们害怕把这道题题面搞得太无聊了,所以我们决定让这题超短.一个序列被称为是不无聊的,仅当它的每个连续子序列存在一个独一无二的数字,即每个子序列里至少存在一个数字只出现一次.给定 ...

  7. 【题解】 bzoj1190: [HNOI2007]梦幻岛宝珠 (动态规划)

    bzoj1190,懒得复制,戳我戳我 Solution: 这道题其实是一个背包(分组背包),但是由于数字比较大,就要重新构造dp式子.啃了三天才懂. \(dp[i][j]\)表示背包容积为\(j*2^ ...

  8. Tomcat:IOException while loading persisted sessions: java.io.EOFException

    Tomcat:IOException while loading persisted sessions: java.io.EOFException 产生原因: 最近将项目名称修改了一下,然后启动项目, ...

  9. linux BASH shell下设置字体及背景颜色

    BASH shell下设置字体及背景颜色 echo -e "\e[31mtest\e[41m" \e[30m 将字符的显示颜色改为黑色 \e[31m 将字符的显示颜色改为红色 \e ...

  10. vue npm start 自动打开网页

    打开config/index.js,设置: autoOpenBrowser: true,(默认是false,把false改为true即可)