我正在编写一个使用 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/

10-12 21:02