我想将目录中的文件添加到压缩档案中,但仅选择名称中带有“ a”的文件。
The filter
argument of Tarfile
objects看起来适合执行此类过滤。
问题是,filter
函数似乎没有任何信息。
我创建了一个简单的示例来再现:
在测试目录中放入两个文件,例如foo
和bar
添加此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
参数?