首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python tarfile和排除

Python tarfile和排除
EN

Stack Overflow用户
提问于 2013-04-14 15:30:28
回答 1查看 7.5K关注 0票数 8

这是Python文档的摘录:

如果给出了排除,它必须是一个函数,它接受一个文件名参数并返回一个布尔值。根据这个值,相应的文件要么被排除(True),要么被添加(False)。

我必须承认我不知道那是什么意思。

此外:

由于版本2.7已不再推荐使用排除参数,请改为使用筛选器参数。为了获得最大的可移植性,应该将筛选器用作关键字参数,而不是位置参数,这样在最终删除排除时,代码就不会受到影响。

好的..。以及“过滤器”的定义:

如果指定了筛选器,则必须是接受TarInfo对象参数并返回已更改的TarInfo对象的函数。如果它没有返回,那么TarInfo对象将被排除在归档文件之外。

..。回到原点:)

我真正需要的是将一个数组(或":“分隔的字符串)传递给tarfile.add。

我不介意你解释一下PyDocs的那些段落。

P.S.:

我刚想到:

  • 生成源dir内容列表的数组。
  • 弹出排除
  • 对剩下的单个数组成员执行tar.add

但是,我想用一种更有教养的方式

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-14 15:46:34

如果给出了排除,它必须是一个函数,它接受一个文件名参数并返回一个布尔值。根据这个值,相应的文件要么被排除(True),要么被添加(False)。

例如,如果你想排除所有以字母a开头的文件名,你会做一些类似的事情.

代码语言:javascript
复制
def exclude_function(filename):
    if filename.startswith('a'):
        return True
    else:
        return False

mytarfile.add(..., exclude=exclude_function)

对于你的案子,你想要的是.

代码语言:javascript
复制
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可以被还原成.

代码语言:javascript
复制
EXCLUDE_FILES = ['README', 'INSTALL', '.cvsignore']

mytarfile.add(..., exclude=lambda x: x in EXCLUDE_FILES)

更新

TBH,我不会太担心弃用警告,但是如果您想使用新的filter参数,您将需要类似于.

代码语言:javascript
复制
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可以被还原成.

代码语言:javascript
复制
EXCLUDE_FILES = ['README', 'INSTALL', '.cvsignore']

mytarfile.add(..., filter=lambda x: None if x.name in EXCLUDE_FILES else x)
票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16000794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档