J'ai une liste de dictionnaires comme
temp_dict = [{'id': '1', 'name': 'john'}, {'id': '2', 'name': 'jake'}, {'id': '3' , 'nom': 'jacob'}]
Existe-t-il un moyen d'écrire directement ce dictionnaire sous forme de fichier csv (délimité par un tuyau) sur S3. Je ne veux pas créer un fichier csv sur mon local à partir de cette liste, puis le copier dans S3.
3 Réponses :
Cela pourrait résoudre votre problème.
Convertissez votre objet en mémoire en flux binaire et passez sur s3 en utilisant boto3.
Comment écrire un fichier ou des données vers un objet S3 en utilisant boto3
Salut Gauri, pouvez-vous s'il vous plaît partager un exemple de code. Je ne sais pas comment convertir une liste de dictionnaires en un flux csv
Je pense que cela serait utile:
1,john 2,jake 3,jacob
import csv class Pipe: value = "" def write(self, text): self.value = self.value + text temp_dict = [{'id':'1', 'name':'john'},{'id':'2', 'name':'jake'},{'id':'3', 'name':'jacob'}] pipe = Pipe() writer = csv.DictWriter(pipe, temp_dict[0].keys()) for entry in temp_dict: writer.writerow(entry) print(pipe.value)
En gros, nous écrivons une classe pour imiter un objet fichier en écriture, puis nous créons une instance, et transmettez-le au DictWriter
. À la fin, nous obtenons le texte csv de pipe.value
.
Voici une solution un peu plus élégante et très rapide notamment avec de grandes listes de dictionnaires.
session = boto3.session.Session(profile_name=<your_profile_name>) resource = session.resource("s3") resource.Object(<s3_bucket>, <s3_key>).put(Body=csv_string_object)
En utilisant cet objet string qui est une représentation du contenu de votre fichier CSV, vous peut directement l'insérer dans S3 de la manière que vous préférez via boto3.
import io import csv data = [{"param1": 1, "param2": 2}, {"param1": 1, "param2": 3}] stream = io.StringIO() headers = list(data[0].keys()) writer = csv.DictWriter(stream, fieldnames=headers) writer.writeheader() writer.writerows(data) csv_string_object = stream.getvalue()
Attention, votre fichier CSV est maintenant chargé en mémoire et risque de planter avec de grandes quantités de données. p>
Quel est le problème, exactement? Avez-vous essayé quelque chose, fait des recherches? Stack Overflow n'est pas un service d'écriture de code gratuit. Voir: visite , Comment demander < / a>, centre d'aide , meta.stackoverflow.com/questions/303812/… .