我正在编写一个使用 tarfile 模块的备份脚本。我是python的初学者。这是我的脚本的一部分 -
所以我有一个需要在 tar.gz 中存档的路径列表。看到这个 post ,我想出了以下内容。现在存档已创建,但具有 .tmp 和 .data 扩展名的文件不会被省略。我正在使用 python 3.5
L = [path1, path2, path3, path4, path5]
exclude_files = [".tmp", ".data"]
# print L
def filter_function(tarinfo):
if tarinfo.name in exclude_files:
return None
else:
return tarinfo
with tarfile.open("backup.tar.gz", "w:gz") as tar:
for name in L:
tar.add(name, filter=filter_function)
最佳答案
您正在比较扩展名与全名。
只需使用 os.path.splitext
并比较扩展名:
if os.path.splitext(tarinfo.name)[1] in exclude_files:
更短:用三元表达式和 lambda 重写你的
add
行以避免辅助函数:tar.add(name, filter=lambda tarinfo: None if os.path.splitext(tarinfo.name)[1] in exclude_files else tarinfo)
关于Python:在 tarfile 中使用过滤器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43408350/