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. java.lang.NoSuchMethodError: No static method getFont(Landroid/content/Context;ILandroid/util/TypedValue;ILandroid/widget/TextView;)

    global.gradle版本配置文件 原配置 compile_sdk_version = 26 build_tools_version = '26.0.2' target_sdk_version = ...

  2. MySql处理函数

    Lower(name) 转换为小写 Upper(name)转换为大写 Substr(name,length,index):从index开始截取length个字符串 Length(name) 获取长度 ...

  3. instanceof与constructor的区别

    名词介绍 instanceof 的作用是判断实例对象是否为构造函数的实例,实际上判断的是实例对象的__proto__属性与构造函数的prototype属性是否指向同一引用: constructor 的 ...

  4. luogu P4108 [HEOI2015]公约数数列——solution

    -by luogu 不会啊.... 然后%了一发题解, 关键是 考虑序列{$a_n$}的前缀gcd序列, 它是单调不升的,且最多只会改变$log_2N$次,因为每变一次至少除2 于是,当我们询问x时: ...

  5. HTML5 简单归纳 -- 前端知识 (一)

    HTML5简介 1.h5不是一个新语言,它是HTML语言第五次重大修改--版本 2.   2014年  h5 3.支持:目前所有的主流浏览器都支持h5,IE8以下不支持 4.特性: a:抛弃了h4中不 ...

  6. js相关判断

    //正则表达式判断是否为空 /^\s*?$/.test(obj) //批量转换方法 function sort(s){return s.match(/\d/g).sort()+'' } //判断是否相 ...

  7. JS--我发现,原来你是这样的JS(引用类型不简单[下篇],基本包装类型与个体内置对象)

    一.介绍 本篇是续上一篇的,引用类型的下篇,本篇主要是说基本包装类型和个体内置对象.如果你能收获一些知识,那我很高兴,很满足,哈哈哈,希望大家能愉快看完.如果你想学好一门技术,要不忘初心,方得始终. ...

  8. OSGI企业应用开发(十三)OSGI Web应用开发(二)

    上篇文章介绍了OSGI Web应用的两种开发模式,并把Jetty应用服务器以Bundle的形式整合到Equinox容器中,已这种模式开发Web应用,所有的应用程序资源,例如Servlet.JSP.HT ...

  9. GDAL打开HDF格式时遇到的中文路径问题(未解决)

    众所周知,中文环境下(VS2010 C++工程编码为多字节编码),在使用1.8.0版本以后的GDAL打开中文路径下的影像文件(如GeoTiff文件)时, 需对中文文件路径做特殊处理,有2种方法:(我使 ...

  10. Emmagee app性能测试工具使用教程

    Emmagee app性能测试工具使用教程 by:授客 QQ:1033553122 简介 Emmagee是网易杭州研究院QA团队开发的一个简单易上手的Android性能监测小工具,主要用于监控单个Ap ...