在以下代码中,让object
和object2
成为boto3的“s3.Object”类型的实例:
data = open('out.dat', 'wb')
object.download_fileobj(data)
object2.download_fileobj(data)
结果是'out.dat'将包含object2的内容 - 而不是我期望的object和object2的串联。有没有办法让download_fileobj()附加到下载目的地而不是覆盖它?
我期望连锁结果的原因与此相似:
with open('test.file', 'wb') as data:
data.write('hello')
data.write(' world')
文件内容是“write()”调用的连接。
为了让事情更加混乱,以下内容产生了S3对象的连接:
with open('out.dat', 'ab') as data:
object.download_fileobj(data)
object2.download_fileobj(data)
将文件模式从“wb”更改为“ab”会导致连接行为而不是覆盖行为。但我会认为'ab'与'wb'在文件打开操作后没有任何区别 - 只发生一次 - 因此对结果没有影响(假设最初不存在'out.dat'。)< / p>
答案 0 :(得分:2)
这不是ab
模式的用途吗?
data = open('out.dat', 'wb')
object.download_fileobj(data)
data.close();
data = open('out.dat','ab');
object2.download_fileobj(data)
data.close();
现在data
都是对象。
希望它有所帮助。
<强> EDIT1:强>
只有运行一次才会更好,
with open('out.dat', 'ab') as data:
object.download_fileobj(data)
object2.download_fileobj(data)
ab - 以追加二进制模式打开。一个危险的事情是代码不可重新运行。
如果再次运行它,它将如下所示,object + object2 + object + object2。 Fil以附加模式打开,无论写入什么都会到文件的末尾。