Dans le code ci-dessous, nous object
et object2
cas être de type « s3.Object » de boto3:Est-ce que download_fileobj() peut ajouter à plutôt que remplacer le fichier de destination?
data = open('out.dat', 'wb')
object.download_fileobj(data)
object2.download_fileobj(data)
Le résultat est que « out.dat » contiendra le contenu de object2 - pas la concaténation de l'objet et object2 comme je m'y attendais. Existe-t-il un moyen d'obtenir download_fileobj() pour ajouter à la destination de téléchargement plutôt que de l'écraser?
La raison pour laquelle j'attendre le résultat est concaténée par analogie avec ceci:
with open('test.file', 'wb') as data:
data.write('hello')
data.write(' world')
Le contenu du fichier sont les concaténation des appels « write() ».
Pour rendre les choses encore plus confuses, les rendements après la concaténation des objets S3:
with open('out.dat', 'ab') as data:
object.download_fileobj(data)
object2.download_fileobj(data)
Modification du mode de fichier « wb » aux résultats « ab » dans le comportement de concaténation plutôt que le comportement Ecraser. Mais j'aurais pensé que 'ab' vs 'wb' n'auraient aucune différence après l'opération d'ouverture du fichier - ce qui arrive une seule fois - et donc aucun effet sur le résultat (en supposant que 'out.dat' n'existe pas initialement.)
En effet, cela fonctionne, mais je dois admettre que je suis confus sur la façon dont il le fait - je vais ajouter plus d'explications dans la question – gcbenison