tarfile模块,读写 tar 压缩文件,包括用 gzip 或是 bz2 压缩的文件(如tar.bz2、tar.gz),一般使用 TarFile 类完成操作

1、模块方法

tarfile.is_tarfile(name):判断 name 是否是一个能被模块读取的 tar 文件
tarfile.open(name=None, mode='r', fileobj=None, bufsize=10240, **kwargs):返回一个 TarFile 对象,简便的打开文件方法

参数设置:
name:文件路径名
mode:打开文件方式,有 'filemode[:compression]' 和 'filemode|[compression]',后者用于处理流数据
'r' 或 'r:*' 或 'r|*':正常压缩打开读取
'r:' 或 'r|':不压缩打开读取
'r:gz' 或 'r|gz':gzip 压缩打开读取
'r:bz2' 或 'r|bz2':bzip2 压缩打开读取
'a' 或 'a:':不压缩追加打开
'w' 或 'w:' 或 'w|':不压缩打开写
'w:gz' 或 'w|gz':gzip 压缩打开写
'w:bz2' 或 'w|bz2':bzip2 压缩打开写
fileobj:如果指定了,就作为 name 的文件对象

2、模块常数

tarfile.USTAR_FORMAT、tarfile.GNU_FORMAT、tarfile.PAX_FORMAT、tarfile.DEFAULT_FORMAT:都是内置的压缩格式
3、模块对象
3.1 TarFile 对象
3.1.1 初始化构建类:TarFile(name=None, mode='r', fileobj=None, format=DEFAULT_FORMAT, tarinfo=TarInfo, dereference=False, ignore_zeros=False, encoding=ENCODING, errors=None, pax_headers=None, debug=0, errorlevel=0)

参数设置:
name:文件路径名,如果指定了 fileobj,可以省略
mode:打开文件方式,有 r 和 w、a,默认为 r
fileobj:如果指定了,就作为 name 的文件对象,会根据文件对象本身的打开方式覆盖 mode
format:压缩格式,必须是模块常数中的一个
tarinfo:可以用自定义的类替换默认的模块的 TarInfo 对象
dereference:False 情况下向压缩包内加入符号链接和硬链接,True 情况下把文件内容加入到压缩包内。此参数对不支持符号链接的系统无作用
ignore_zeros:False 情况下遇到空块就认为到文件尾,True 情况下跳过空块和无效块,获得尽可能多的数据,对于读取连续数据或损坏的压缩包有用
encoding、errors:控制字符串的转码,默认设置可以解决大多数问题
pax_headers:unicode 字符串转码的一个字典,可以帮助解决不能正确解码的问题
debug:0-3,0 没有 debug 信息,3 输出所有 debug 信息至 sys.stderr
errorlevel:0 忽略所有错误,1 抛出所有致命错误,2 抛出所有错误

3.1.2 类方法

TarFile.open(...):另一种构造方法,模块方法的 tarfile.open() 是这个方法的删减版

3.1.3 实例方法
getmember(name):返回一个 TarInfo 对象,包含压缩文件里名为 name 的信息
getmembers():返回一个列表,每个元素都是一个 TarInfo 对象,对应压缩文件里的每个文件
getnames():列表形式返回压缩文件里的每个文件名
list(verbose=True):把压缩包内容输出到 sys.stdout,verbose 为 False 时只打印名字,True 时输出同 ls -l
next():返回压缩包中下一个文件的 TarInfo 对象
extractall(path=".", members=None):解压所有文件至当前目录,path 指定解压至别的目录,member 指定只解压其中的哪些文件
extract(member, path=""):解压名为 member 的文件到当前目录,path 指定解压至别的目录
add(name, arcname=None, recursive=True, exclude=None, filter=None):把名为 name 的文件添加至压缩包中,arcname 指定在压缩包内名字,recursive 指定是否递归整个文件夹,exclude 必须是一个接收一个文件名为参数,返回布尔值的函数,返回值为真就把这个文件排除不添加,反之添加,filter 必须是一个接收一个 TarInfo 对象的函数,返回一个修改后的 TarInfo 对象
addfile(tarinfo, fileobj=None):把名为 tarinfo 的 TarInfo 对象加入到压缩包内
gettarinfo(name=None, arcname=None, fileobj=None):从 os.stat() 的结果或一个存在的文件创建一个 TarInfo 对象
close():关闭压缩文件,在写模式下会在尾部添加两个 0 块(two finishing zero blocks)

3.2 TarInfo 对象

3.2.1 初始化构建类:TarInfo(name=""),一般不直接构建,都由 getmember()、getmembers() 或 gettarinfo() 得到

3.2.2 实例方法

frombuf(buf):从字符串缓冲区 buf 创建一个 TarInfo 对象
fromtarfile(tarfile):读取压缩包 tarfile 的下一个文件,返回 TarInfo 对象
tobuf(format=DEFAULT_FORMAT, encoding=ENCODING, errors='strict'):从一个 TarInfo 对象创建一个字符串缓冲区,参数同 TarFile 类
isfile()、isreg()、isdir()、issym()、islnk()、ischr()、isblk()、isfifo()、isdev():判断实例文件属性

3.2.3 实例属性

name:文件名
size:文件字节大小
mtime:最后修改时间
mode:文件权限
type:文件类型
linkname:目标文件名
uid:存储此对象的用户 ID
gid:存储此对象的组 ID
uname:用户名
gname:组名
pax_headers:包含转换键值的字典

Python2.7-tarfile的更多相关文章

  1. Python之文件与目录操作及压缩模块(os、shutil、zipfile、tarfile)

    Python中可以用于对文件和目录进行操作的内置模块包括: 模块/函数名称 功能描述 open()函数 文件读取或写入 os.path模块 文件路径操作 os模块 文件和目录简单操作 zipfile模 ...

  2. CentOS升级Python2.7导致使用pip等命令安装模块失败

    报错如下: # pip Traceback (most recent call last): File , in <module> from pkg_resources import lo ...

  3. 回味Python2.7——笔记4

    一.Python 标准库概览 1.操作系统接口 os 模块提供了很多与操作系统交互的函数: >>> import os >>> os.getcwd() # Retu ...

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

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

  5. 【转】Python之文件与目录操作(os、zipfile、tarfile、shutil)

    [转]Python之文件与目录操作(os.zipfile.tarfile.shutil) Python中可以用于对文件和目录进行操作的内置模块包括: 模块/函数名称 功能描述 open()函数 文件读 ...

  6. Python之文件与目录操作(os、zipfile、tarfile、shutil)

    Python中可以用于对文件和目录进行操作的内置模块包括: 模块/函数名称 功能描述 open()函数 文件读取或写入 os.path模块 文件路径操作 os模块 文件和目录简单操作 zipfile模 ...

  7. tarfile/zipfile/shutil

    当我们选择使用Python来进行Linux系统管理,那么就免不了会在Python代码中对压缩包进行处理,包括创建压缩包.解压.获取压缩包中的文件列表等 tarfile Python的tarfile标准 ...

  8. python 基础之第十天(闭包,装饰器,生成器,tarfile与hashlib模块使用)

    局部变量与全局变量 局部变量:在函数里面定义的,只有当函数活动时才生效 全局变量:不在函数里面的 In [1]: x=10 In [2]: def bar(): ...: x=20 ...: prin ...

  9. 让VIM支持Python2 by update-alternatives

    前言  Ubuntu 16+中$ sudo apt install vim所安装的vim只支持Python3,但很多插件如YCM和powerline均需要Python2,那就来场"生命贵在折 ...

  10. 烂泥:python2.7和python3.5源码安装

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 前几天在centos6.6安装ansible时,一直提示python版本不对,导致不能安 ...

随机推荐

  1. 【17】迭代器模式(Iterator Pattern)

    一.引言 在上篇博文中分享了我对命令模式的理解,命令模式主要是把行为进行抽象成命令,使得请求者的行为和接受者的行为形成低耦合.在这一章中,将介绍一下迭代器模式. 二.迭代器模式的介绍 迭代器是针对集合 ...

  2. 常见Java问题二

    1.什么是B/S架构?什么是C/S架构? B/S browser/server Web应用程序 C/S Client/Server 桌面应用程序 2.String str="www" ...

  3. apicloud 消息推送与接收

    待解决的问题,如下: 在使用apicloud 的时候我们,在开发用户登录的时候可能会遇到这样的问题,当有2个设备a,b同事使用的app的时候并且是同一个人登录,我们需要去做判断,即大家常说的单点登录. ...

  4. js-react组件生命周期

    组件的生命周期可分成三个状态: Mounting:已插入真实 DOM Updating:正在被重新渲染 Unmounting:已移出真实 DOM 生命周期的方法有: componentWillMoun ...

  5. JavaScript中何时使用===,何时使用==

    建议尽量都使用===,原因如下: 一致性:使用==对一致性没有任何好处,那么为什么不避免使用呢. 简单和性能:一般来说,===是最简单的操作符,因为它不用进行类型转换.JavaScript引擎的性能参 ...

  6. ActiveReports 报表应用教程 (15)---报表换肤

    在葡萄城ActiveReports报表中,可以设置报表中不同控件的样式,然后把这些样式保存到一个外部的XML文件当中,供其他报表使用.如果用户希望同一份报表以不用的外观分发,只需要简单地修改样式表单, ...

  7. 如何为APK签名?

      1.用来生成应用签名的文件 ①默认: debug.keystore > debug签名的应用程序不能在Android Market上架销售,它会强制你使用自己的签名.> 不同电脑使用此 ...

  8. 关于Java单例模式中懒汉式和饿汉式的两种类创建方法

    一. 什么是单例模式 因程序需要,有时我们只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计. 二. 单例模式的特点 1. 单例模式只能有一个实例. 2. 单例类必须创建 ...

  9. [Android] Linux下JNI简单实现过程

    大概梳理了一下JNI的过程: start->先写好A.java文件,里面添加native方法B,调用库C.so->编译成.class文件->用javac生成.h文件,文件包含Java ...

  10. linux 查找匹配文件中包含指定字符的 前五行,这里是指所有匹配的前五行

    最近被问到 一个关于查找匹配字符的信息显示问题: 系统/etc/sysctl.conf文件会定义系统内核的一些配置,请查找和net有关的信息,并只打印前面5行信息. 解决方式大概试两种写法均可: 1. ...