Python tarfile和排除
这是Python文档的摘录:
如果给出了exclude,则它必须是一个使用一个文件名参数并返回布尔值的函数。根据此值,相应文件被排除(真)或被添加(假)。
我必须承认我不知道那意味着什么。
此外:
从2.7版开始不推荐使用:不推荐使用exclude参数,请改用filter参数。为了获得最大的可移植性,应将filter用作关键字参数而不是位置参数,以便在最终删除exclude时不会影响代码。
好的…以及“过滤器”的定义:
如果指定了filter,则它必须是一个接受TarInfo对象参数并返回更改后的TarInfo对象的函数。如果改为返回None,则将从存档中排除TarInfo对象。
… 回到原点 :)
我真正需要的是一种将排除项的数组(或“:”定界字符串)传递给tarfile.add的方法。
我不介意您尝试解释PyDocs中的内容。
PS:
这只是我的想法:
- 制作源目录内容列表的数组
- 弹出排除
- 对剩下的单个数组成员执行tar.add
但是,我希望它以一种更有文化色彩的方式来完成
-
如果给出了exclude,则它必须是一个使用一个文件名参数并返回布尔值的函数。根据此值,相应文件被排除(真)或被添加(假)。
例如,如果要排除所有以字母“ a”开头的文件名,则可以执行以下操作:
def exclude_function(filename): if filename.startswith('a'): return True else: return False mytarfile.add(..., exclude=exclude_function)
对于您的情况,您想要类似…
EXCLUDE_FILES = ['README', 'INSTALL', '.cvsignore'] def exclude_function(filename): if filename in EXCLUDE_FILES: return True else: return False mytarfile.add(..., exclude=exclude_function)
…可以减少到…
EXCLUDE_FILES = ['README', 'INSTALL', '.cvsignore'] mytarfile.add(..., exclude=lambda x: x in EXCLUDE_FILES)
更新资料
TBH,我不必担心过时警告,但是如果您想使用新
filter
参数,则需要类似…EXCLUDE_FILES = ['README', 'INSTALL', '.cvsignore'] def filter_function(tarinfo): if tarinfo.name in EXCLUDE_FILES: return None else: return tarinfo mytarfile.add(..., filter=filter_function)
…可以减少到…
EXCLUDE_FILES = ['README', 'INSTALL', '.cvsignore'] mytarfile.add(..., filter=lambda x: None if x.name in EXCLUDE_FILES else x)