如何在tarfile.add()中使用过滤器参数?

时间:2018-10-17 16:24:52

标签: python-3.x tar

我想将目录中的文件添加到压缩档案中,但仅选择名称中带有“ a”的文件。

The filter argument of Tarfile objects看起来适合执行此类过滤。

问题是,filter函数似乎没有任何信息。

我创建了一个简单的示例来再现:

  • 在测试目录中放入两个文件,例如foobar

  • 添加此python脚本(只需将路径更改为测试目录WD):

    #!/usr/bin/env python3
    
    import os
    import tarfile
    
    WD = '/home/nico/temp/essai_py/directory'
    
    
    def __tar_filter(tar_info):
        print('\ntar_info={}\n'.format(repr(tar_info)))
        print('\ntar_info.name={}\n'.format(tar_info.name))
        if 'a' in tar_info.name:
            return tar_info
        return None
    
    
    with tarfile.open('dest.tgz', 'w:gz') as tar:
        for f in os.listdir(WD):
            tar.add(os.path.join(WD, f), arcname=os.path.sep, filter=__tar_filter)
    

现在,当我运行此脚本时,我得到:

tar_info=<TarInfo '' at 0x7f1f7ffbfa70>


tar_info.name=


tar_info=<TarInfo '' at 0x7f1f7ffbfa70>


tar_info.name=

当然,dest.tgz是空的(没有给出名称,因此每次都返回None)。

奇怪的是,已经给同一个TarInfo对象提供了两次过滤功能,所以这里有些事情我一定不太了解。

当然,对于这种情况,我可以在创建文件列表时自行过滤文件名(这不是问题),但是我不应该出于同一目的使用filter参数?

0 个答案:

没有答案