在将文件添加到TAR文件时删除原始文件

时间:2018-01-17 01:26:32

标签: python-3.x tar

我编写了一个小型服务器函数,用于tar一堆本地下载的文件,然后删除原件。它看起来像这样:

with tarfile.open(archive_filename, "w:gz") as tar:
    for pb in designated_objects:
        bucket.download_file(pb.key, pb.key)
        tar.add(pb.key)
        os.delete(pb.key)

我的期望是,这将生成一个tarfile,其中包含我所需的所有数据和其他空目录。这里的想法是我想尽可能地减少我的光盘使用量。但是,我不确定是否允许在tarfile完成生成之前删除文件(如此处所示)。

这个表达式会按预期工作吗?

如果没有,是否会出现类似追加模式的东西?

1 个答案:

答案 0 :(得分:0)

正如预期的那样,填充原始文件,然后删除。但是,存档的行为是不寻常的。运行此代码块时,将生成 no 存档。实际上,此代码块根本不执行任何操作(删除文件除外)。

我发现这种行为特别不寻常和令人惊讶,因为在pass语句中(如下面的代码中)取with实际上会将空存档写入光盘。所以从某种意义上说,给定的代码块甚至少于

with tarfile.open('archive_filename.xy.gz', "w:gz") as tar:
   pass

作为参考,这种行为是我用Python 3.6获得的。其他版本的Python的行为可能有所不同。