【发布时间】:2018-06-25 19:37:49
【问题描述】:
我写了一个小服务器函数,目的是把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)
我的期望是这将生成一个包含所有我想要的数据和一个空目录的 tar 文件。这里的想法是我想尽可能减少我的磁盘使用量。但是,我不确定是否允许在 tarfile 生成完成之前删除文件(如此处所做的)。
这个表达式会按预期工作吗?
如果不会,是否有类似于附加模式的东西?
【问题讨论】:
-
似乎最简单的找出方法就是尝试一下
-
这适用于 AWS s3 存储桶吗?您是否考虑过改用
download_fileobj?这样您就不必费心将重复的数据放在磁盘上,稍后再将其删除。 -
@sytech 这确实是 AWS S3 操作。我很佩服你已经抓住了它!这是一个我正在尝试优化内存使用的 Lambda 函数。
-
@dave 我试过了。请参阅下面的答案。
-
@AlekseyBilogur 然后使用
download_fileobj听起来像是要走的路。因为tarfile.open接受类似文件的对象,所以您应该能够将文件直接下载到您的存档中,而无需将其放在磁盘上。
标签: python-3.x tar