TarFile类对于就是tar压缩包实例. 其由member块组成, member块则包括header块和data块. 每个member以TarInfo对象形式描述. 所以TarFile就是TarInfo的序列. 其初始化函数的形参和TarFile类的属性对应, 其中比较重要是dereference属性,默认False(此时symbolic文件会以符号文件存进去),设置为True时会将其目标文件存到压缩包.

  • getmember(name), getmembers(), getnames(): 分别返回指定文件名的TarInfo, 所有TarInfo和所有TarInfo文件名. 后两者顺序一致. 如果里面有很多个同名的member, 则取最后的.
  • list(verbose=True) 列出tar里的文件信息, verbose相对于ls -l
  • next() 就是for方法迭代器调用的, 返回下一个TarInfo对象.
  • extractall(path=”.”, members=None), 解压所有文件, path是解压路径,默认当前目录,如果指明members(一个子集,TarInfo列表, 也可以是迭代器).
  • extract(member, path=””), 解压指定member的文件,path是解压路径.
  • extractfile(member): 提取相应对象为一个只读文件对象. member这里可以是文件名或者TarInfo.
  • add(name, arcname=None, recursive=True, exclude=None, filter=None): 根据文件名创建TarInfo对象并添加文件到压缩包,可以指定arcname在压缩包里面使用的另外的名字, recursive是对文件夹处理时是否递归, exclude不建议用,filter(需要用key=value形式)是一个函数名,输入是TarInfo对象, 返回新的TarInfo对象或None(None的话就不被写入到压缩包, 可以用于过滤, 所以替代了exclude)
  • addfile(tarinfo, fileobj=None): 将TarInfo对象或者文件对象添加到压缩包.一般配合gettarinfo使用
  • gettarinfo(name=None, arcname=None, fileobj=None): 通过文件名或文件对象来创造TarInfo对象. arcname可以重命名文件
 import tarfile

 # 压缩
tar = tarfile.open('your.tar','w') # 创建一个压缩包
tar.add('/Users/wupeiqi/PycharmProjects/bbs2.log', arcname='bbs2.log') # 将文件添加到压缩包并命名
tar.add('/Users/wupeiqi/PycharmProjects/cmdb.log', arcname='cmdb.log') #
tar.close() # 关闭压缩包 # 解压
tar = tarfile.open('your.tar','r') # 打开一个压缩包
tar.extractall() # 解压包内所有文件(可设置解压地址)
tar.close() # 关闭压缩包

压缩某个目录下所有文件

def compress_file(tarfilename, dirname):    # tarfilename是压缩包名字,dirname是要打包的目录
if os.path.isfile(dirname):
with tarfile.open(tarfilename, 'w') as tar:
tar.add(dirname)
else:
with tarfile.open(tarfilename, 'w') as tar:
for root, dirs, files in os.walk(dirname):
for single_file in files:
# if single_file != tarfilename:
filepath = os.path.join(root, single_file)
tar.add(filepath) compress_file('test.tar', 'test.txt')
compress_file('t.tar', '.')

添加文件到已有的tar包中

def addfile(tarfilename, dirname):    # tarfilename是压缩包名字,dirname是要打包的目录
if os.path.isfile(dirname):
with tarfile.open(tarfilename, 'a') as tar:
tar.add(dirname)
else:
with tarfile.open(tarfilename, 'a') as tar:
for root, dirs, files in os.walk(dirname):
for single_file in files:
# if single_file != tarfilename:
filepath = os.path.join(root, single_file)
tar.add(filepath) addfile('t.tar', 'ttt.txt')
addfile('t.tar', 'ttt')

其中open的原型是:

tarfile.open(name=None, mode='r', fileobj=None, bufsize=10240, **kwargs)

mode值有:

'r' or 'r:*'   Open for reading with transparent compression (recommended).
'r:' Open for reading exclusively without compression.
'r:gz' Open for reading with gzip compression.
'r:bz2' Open for reading with bzip2 compression.
'a' or 'a:' Open for appending with no compression. The file is created if it does not exist.
'w' or 'w:' Open for uncompressed writing.
'w:gz' Open for gzip compressed writing.
'w:bz2' Open for bzip2 compressed writing.

python tarfile模块的更多相关文章

  1. Python tarfile模块解压报错 invalid mode ('wb') or filename

    问题原因 在使用tarfile模块解压一份Linux服务器上的打包文件时, 出现了错误提示: IOError: [Errno 22] invalid mode ('wb') or filename. ...

  2. python tarfile模块基本使用

    1.压缩一个文件夹下的所有文件 #coding=utf8 import os import tarfile __author__ = 'Administrator' def main(): cwd = ...

  3. python tarfile模块打压缩包,arcname的用法

    D:\szh\noses文件夹下有子文件夹和文件   with tarfile.open('E:\\szh.tar', "w") as tar:     tar.add('D:\\ ...

  4. Python第二十天 shutil 模块 zipfile tarfile 模块

    Python第二十天  shutil 模块  zipfile   tarfile 模块 os文件的操作还应该包含移动 复制  打包 压缩 解压等操作,这些os模块都没有提供 shutil 模块shut ...

  5. Python中模块之shutil及zipfile&tarfile的功能介绍

    shutil的功能介绍及其他打包.压缩模块 1. shutil模块的方法 chown 更改指定路径的属组 2. copy 拷贝文件和权限 方法:shutil.copy(src,dst,*,follow ...

  6. python标准模块(二)

    本文会涉及到的模块: json.pickle urllib.Requests xml.etree configparser shutil.zipfile.tarfile 1. json & p ...

  7. Day05 - Python 常用模块

    1. 模块简介 模块就是一个保存了 Python 代码的文件.模块能定义函数,类和变量.模块里也能包含可执行的代码. 模块也是 Python 对象,具有随机的名字属性用来绑定或引用. 下例是个简单的模 ...

  8. Day5 模块及Python常用模块

    模块概述 定义:模块,用一砣代码实现了某类功能的代码集合. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,提供了代码的重用性.在Python中,一个.py文件就称之为一个模块(Mod ...

  9. Python ftplib模块

    Python ftplib模块 官方文档:https://docs.python.org/3/library/ftplib.html?highlight=ftplib#module-ftplib 实例 ...

随机推荐

  1. Maven简介、安装、配置

    1.Maven是什么? Maven是一种跨平台的项目管理工具,是一个开源的项目,主要服务于基于java平台的项目构建.依赖管理和项目信息管理.Maven还提供了中央仓库,能帮助我们自动的下载构件.Ma ...

  2. 小技巧——直接在目录中输入cmd然后就打开cmd命令窗口

    直接在目录中输入cmd然后就打开cmd命令窗口

  3. IVIEW组件Table中加入EChart柱状图

    展示图如下: 主要利用了render函数和updated()钩子函数进行数据填充与渲染. 1.在Table的Colums中加入 1 { 2 title: '比例图', 3 align: 'center ...

  4. 解决vscode打开空白的问题

    环境 :win7,最新vscode 问题:打开后窗口全黑,但是原按钮对应位置还有触摸手势,显示tag等,卸载重装等无效,如上图 最终方案: 启动方式后加 --disable-gpu 解决思路(其余参考 ...

  5. JAVA NIO缓冲区(Buffer)------ByteBuffer常用方法

    参考:https://blog.csdn.net/xialong_927/article/details/81044759 缓冲区(Buffer)就是在内存中预留指定大小的存储空间用来对输入/输出(I ...

  6. 苹果系统OSX中Automator批量重命名

    Automator,看字面意思就无比强大,[自动机器].有什么能比自动还让人着魔? 答案是没有✔ 如果你用的是mac,如果你有一堆文件要重新整理命名,如果你还在Goole什么"批量重命名软件 ...

  7. 栈(Java实现)

    栈是最基本的数据结构之一,其特点是先进后出. 1.基于数组的可动态调节大小的栈 public class ResizingArrayStack<Item> { private Item[] ...

  8. 使用fui(Find Unused Imports)扫描工程中不用的类

    为了给APP提速,需要定期清理不用的类 fui(Find Unused Imports)是开源项目能很好的分析出不再使用的类,准确率非常高,唯一的问题是它处理不了动态库和静态库里提供的类,也处理不了C ...

  9. docker容器安装命令

    apt-get update apt-get install vim 转载请注明博客出处:http://www.cnblogs.com/cjh-notes/

  10. LeetCode 124. 二叉树中的最大路径和(Binary Tree Maximum Path Sum)

    题目描述 给定一个非空二叉树,返回其最大路径和. 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列.该路径至少包含一个节点,且不一定经过根节点. 示例 1: 输入: [1,2,3] 1 ...