Python 基础之压缩模块zipfile与tarfile
一.压缩模块 zipfile
(1)创建一个zip压缩包
import zipfile #zip_deflated 代表是压缩的意思
#打开压缩包
zf = zipfile.ZipFile("ceshi1005.zip","w",zipfile.ZIP_DEFLATED)
print(zf)
#写入文件
#write("路径","别名")
zf.write("/bin/cat","cat")
zf.write("/bin/ls","ls")
zf.write("/bin/chgrp","chgrp")
#关闭压缩包
zf.close()
(2)解压文件
zf = zipfile.ZipFile("ceshi1005.zip","r")
#extractall("路径") 解压所有文件到一个文件夹当中
zf.extractall("./ceshi100005")
#zf.extract("文件名","路径") 解压单个文件到文件夹当中
zf.extract("ls","./ceshi100006")
zf.close()
(3)追加文件
#zipfile 同样支持with语法
with zipfile.ZipFile("ceshi1005.zip","a",zipfile.ZIP_DEFLATED) as zf:
#在添加文件的时候,可以动态为该文件创建文件夹
zf.write("/bin/cp","/and/cp")
#(4)查看压缩包中的内容
with zipfile.ZipFile("ceshi1005.zip","r") as zf:
res = zf.namelist()
print(res)
二.tarfile 压缩包
import tarfile
(1)创建tarfile压缩包
tf = tarfile.open("ceshi001.tar","w",encoding="utf-8")
#add(路径,别名) 添加文件到压缩包当中
tf.add("/bin/dash","dash")
tf.add("/bin/dd","dd")
tf.add("/bin/df","/tmp/df")
#关闭压缩包
tf.close() #327680
#按照gz 算法 创建一个.tar.gz 的压缩包
tf = tarfile.open("ceshi001.tar.gz","w:gz",encoding="utf-8")
tf.add("/bin/dash","dash")
tf.add("/bin/dd","dd")
tf.add("/bin/df","/tmp/df")
tf.close() #162558
#按照bz2算法 创建一个.tar.bs2 的压缩包
tf = tarfile.open("ceshi001.tar.bz2","w:bz2",encoding="utf-8")
tf.add("/bin/dash","dash")
tf.add("/bin/dd","dd")
tf.add("/bin/df","/tmp/df")
tf.close() #147524
#理论上:bz2算法压缩包要比gz算法压缩的包小
(2) 解压文件
tf = tarfile.open("ceshi001.tar.gz","r",encoding="utf-8")
#一次性解压所有
#tf.extractall("ceshi001")
#解压单个文件
tf.extract("dd","ceshi001_dd")
tf.close()
(3)追加文件
tarfile 有局限性,不能对已经压缩好的包进行追加文件
只能对光打包不压缩的文件进行追加
#
#with tarfile.open("ceshi001.tar.bz2","a",encoding="utf-8") as tf:
with tarfile.open("ceshi001.tar","a",encoding="utf-8") as tf:
#add(路径,别名)
tf.add("/bin/sleep","sleep")
(4)查看压缩包的内容
with tarfile.open("ceshi001.tar","r",encoding="utf-8") as tf:
res = tf.getnames()
print(res)
##对tarfile 的追加进行改写
(1)把原来的压缩包进行解压
(2)把要追加的文件塞进去
(3)重新过滤,重新打包
import os
#__file__
res = os.getcwd()
path1 = os.path.join(res,"ceshi001.tar.bz2")
path2 = os.path.join(res,"ceshi0011")
print(path1) #/mnt/hgfs/pylinux/ceshi001.bar.bz2
print(path2) #/mnt/hgfs/pylinux/ceshi0011
#(1)把原来的压缩包进行解压
with tarfile.open(path1,mode="r",encoding="utf-8") as tf:
tf.extractall(path2) #把解压出来的文件放在ceshi0011上
#(2) 把要追加的文件塞进去
#os.system("cp -a /bin/login " + path2)
os.system("cp -a /bin/login {}".format(path2))
#(3) 开始过滤,dd这个文件过滤不要了
lst = os.listdir(path2)
with tarfile.open(path1,"w:bz2",encoding="utf-8") as tf:
for i in lst:
path_new = os.path.join(path2,i)
if i != "dd":
#add(路径,文件/文件夹)
tf.add(path_new,i)
Python 基础之压缩模块zipfile与tarfile的更多相关文章
- Python第二十天 shutil 模块 zipfile tarfile 模块
Python第二十天 shutil 模块 zipfile tarfile 模块 os文件的操作还应该包含移动 复制 打包 压缩 解压等操作,这些os模块都没有提供 shutil 模块shut ...
- python基础31[常用模块介绍]
python基础31[常用模块介绍] python除了关键字(keywords)和内置的类型和函数(builtins),更多的功能是通过libraries(即modules)来提供的. 常用的li ...
- 十八. Python基础(18)常用模块
十八. Python基础(18)常用模块 1 ● 常用模块及其用途 collections模块: 一些扩展的数据类型→Counter, deque, defaultdict, namedtuple, ...
- Python基础-包与模块
Python基础-包与模块 写在前面 如非特别说明,下文均基于Python3 摘要 为重用以及更好的维护代码,Python使用了模块与包:一个Python文件就是一个模块,包是组织模块的特殊目录(包含 ...
- python基础,函数,面向对象,模块练习
---恢复内容开始--- python基础,函数,面向对象,模块练习 1,简述python中基本数据类型中表示False的数据有哪些? # [] {} () None 0 2,位和字节的关系? # ...
- python基础-包和模块
Python基础-包与模块 写在前面 如非特别说明,下文均基于Python3 摘要 为重用以及更好的维护代码,Python使用了模块与包:一个Python文件就是一个模块,包是组织模块的特殊目录(包含 ...
- python常用标准库(压缩包模块zipfile和tarfile)
常用的标准库 在我们常用的系统windows和Linux系统中有很多支持的压缩包格式,包括但不限于以下种类:rar.zip.tar,以下的标准库的作用就是用于压缩解压缩其中一些格式的压缩包. zip格 ...
- s14 第5天 时间模块 随机模块 String模块 shutil模块(文件操作) 文件压缩(zipfile和tarfile)shelve模块 XML模块 ConfigParser配置文件操作模块 hashlib散列模块 Subprocess模块(调用shell) logging模块 正则表达式模块 r字符串和转译
时间模块 time datatime time.clock(2.7) time.process_time(3.3) 测量处理器运算时间,不包括sleep时间 time.altzone 返回与UTC时间 ...
- Python全栈开发之路 【第六篇】:Python基础之常用模块
本节内容 模块分类: 好处: 标准库: help("modules") 查看所有python自带模块列表 第三方开源模块: 自定义模块: 模块调用: import module f ...
随机推荐
- vue中的金额格式0.00 和 后台返回时间格式带T调整正常格式
<template> <div class="consumption"> <p>{{payTime|Time}}</p> <p ...
- ISR吞吐性能问题
ISR大致可以分几类: Cisco 860.880.890 ISR1800 (fixed).1800 (modular).2800.3800 Series ISR1900.2900.3800.3900 ...
- 前端之HTML基础篇
HTML基础篇 目录 本章内容: 简介 1. ...
- mybatis用mysql数据库自增主键,插入一条记录返回新增记录的自增主键ID
今天在敲代码的时候遇到一个问题,就是往数据库里插入一条记录后需要返回这个新增记录的ID(自增主键), 公司框架用的是mybatis的通用Mapper接口,里面的插入方法貌似是不能把新纪录的ID回填到对 ...
- Java编写POST请求
package com.mytesting; import java.io.DataOutputStream; import java.io.InputStream; import java.net. ...
- 设置textarea不可拉伸
默认情况下,我们将鼠标移动到textarea的右下角时发现文本域是可以通过拖动的方式改变其大小的,这会影响我们原本的页面布局.若想设置其不可拖动,可为其添加如下属性: style="resi ...
- jvm01
hotspot:是jvm的核心组件(或者名称),jvm 需要对class文件进行编译成cpu能直接运行的代码.hotspot会对频繁使用的class代码进行缓存,不会再次编译,类似于缓存 client ...
- STM32F030 启用内部晶振并配置系统时钟为48M
在文件 system_stm32f0xx.c 里的函数 static void SetSysClock(void) { if (HSEStatus == (uint32_t)0x01) // 存在外部 ...
- Spring_002 依赖注入方式实现
继续写我们的第一个Spring程序,这次我们使用依赖注入的方式实现程序 第一步,建立我们的Spring_002程序,并在程序中添加BookDao.java.BookDaoImpl.java.BookS ...
- Android9 http网络请求的问题
Google表示,为保证用户数据和设备的安全,针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的 ...