我编写了一个小型服务器函数,用于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完成生成之前删除文件(如此处所示)。
这个表达式会按预期工作吗?
如果没有,是否会出现类似追加模式的东西?
答案 0 :(得分:0)
正如预期的那样,填充原始文件,然后删除。但是,存档的行为是不寻常的。运行此代码块时,将生成 no 存档。实际上,此代码块根本不执行任何操作(删除文件除外)。
我发现这种行为特别不寻常和令人惊讶,因为在pass
语句中(如下面的代码中)取with
实际上会将空存档写入光盘。所以从某种意义上说,给定的代码块甚至少于!
with tarfile.open('archive_filename.xy.gz', "w:gz") as tar:
pass
作为参考,这种行为是我用Python 3.6获得的。其他版本的Python的行为可能有所不同。