• python tarfile模块


    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可以重命名文件
     1 import tarfile
     2  
     3 # 压缩
     4 tar = tarfile.open('your.tar','w')  # 创建一个压缩包
     5 tar.add('/Users/wupeiqi/PycharmProjects/bbs2.log', arcname='bbs2.log')  # 将文件添加到压缩包并命名
     6 tar.add('/Users/wupeiqi/PycharmProjects/cmdb.log', arcname='cmdb.log')  #
     7 tar.close()  # 关闭压缩包
     8  
     9 # 解压
    10 tar = tarfile.open('your.tar','r')  # 打开一个压缩包
    11 tar.extractall()  # 解压包内所有文件(可设置解压地址)
    12 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.
  • 相关阅读:
    KMP算法
    字典树
    BM算法
    AC自动机
    系统架构师基础到企业应用架构服务层
    系统架构师基础到企业应用架构系统设计规范与原则[上篇]
    系统架构师基础到企业应用架构系统建模[中篇](下)
    系统架构师基础到企业应用架构企业应用架构
    系统架构师基础到企业应用架构客户端/服务器
    系统架构师基础到企业应用架构系统设计规范与原则[下篇]
  • 原文地址:https://www.cnblogs.com/shona/p/11953678.html
Copyright © 2020-2023  润新知