这是Python文档的摘录:
如果给出了排除,它必须是一个函数,它接受一个文件名参数并返回一个布尔值。根据这个值,相应的文件要么被排除(True),要么被添加(False)。
我必须承认我不知道那是什么意思。
此外:
由于版本2.7已不再推荐使用排除参数,请改为使用筛选器参数。为了获得最大的可移植性,应该将筛选器用作关键字参数,而不是位置参数,这样在最终删除排除时,代码就不会受到影响。
好的..。以及“过滤器”的定义:
如果指定了筛选器,则必须是接受TarInfo对象参数并返回已更改的TarInfo对象的函数。如果它没有返回,那么TarInfo对象将被排除在归档文件之外。
..。回到原点:)
我真正需要的是将一个数组(或":“分隔的字符串)传递给tarfile.add。
我不介意你解释一下PyDocs的那些段落。
P.S.:
我刚想到:
但是,我想用一种更有教养的方式
发布于 2013-04-14 15:46:34
如果给出了排除,它必须是一个函数,它接受一个文件名参数并返回一个布尔值。根据这个值,相应的文件要么被排除(True),要么被添加(False)。
例如,如果你想排除所有以字母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)...which可以被还原成.
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)...which可以被还原成.
EXCLUDE_FILES = ['README', 'INSTALL', '.cvsignore']
mytarfile.add(..., filter=lambda x: None if x.name in EXCLUDE_FILES else x)https://stackoverflow.com/questions/16000794
复制相似问题