2017-08-15 3 views
-3

J'ai des problèmes pour exporter certains éléments d'un dictionnaire au format CSV. Je peux exporter 'nom' mais pas 'images' (l'URL de l'image).Comment exporter le dictionnaire au format CSV en utilisant Python?

Ceci est un exemple d'une partie de mon dictionnaire:

new = [{ "name" : "peter", "picture" : "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F33500665%2F25911657759%2F1%2Foriginal.jpg?h=200&w=450&rect=0%2C581%2C6000%2C3000&s=bfaa2901b8c906a66c51563d15c6df12"}, 
{"name" : "jim" , "picture" : "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F32935536%2F10115879927%2F1%2Foriginal.jpg?h=200&w=450&rect=0%2C40%2C624%2C312&s=c67e995e83234ab460707ac21f3541f8"}] 

EDIT (je fait une erreur avec la désignation comme ce fut ce qui a fait remarquer il semble fonctionner maintenant, après sa mise à jour.).

Et ceci est le code que je l'ai écrit (qui travaille pour « nom » mais pas « image »):

import csv 

test = [] 

for document in new: 
    event_obj = {} 

    # Get name 
    event_obj['name'] = document['name'] 

    # Get images 
    event_obj['picture'] = document['picture'] 

    test.append(event_obj) 

# Create CSV file 
with open('Eventbrite_events.csv', 'w', newline='') as csvfile: 
    fields = ['name', 'picture'] 
    writer = csv.DictWriter(csvfile, fieldnames=fields) 
    writer.writeheader() 
    for x in test: 
     writer.writerow(x) 
print(csvfile) 
+3

check nommant images > image –

+0

Cela semble fonctionner maintenant. Merci @Anar Bayramov –

Répondre

1

Votre liste new contient des dictionnaires avec la picture clé, mais que vous essayez d'accéder à un appelé images.

import csv 

new = [ 
    { "name" : "peter", "picture" : "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F33500665%2F25911657759%2F1%2Foriginal.jpg?h=200&w=450&rect=0%2C581%2C6000%2C3000&s=bfaa2901b8c906a66c51563d15c6df12"}, 
    {"name" : "jim" , "picture" : "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F32935536%2F10115879927%2F1%2Foriginal.jpg?h=200&w=450&rect=0%2C40%2C624%2C312&s=c67e995e83234ab460707ac21f3541f8"}] 

test = [] 

for document in new: 
    event_obj = {} 

    # Get name 
    event_obj['name'] = document['name'] 

    # Get images 
    event_obj['images'] = document['picture'] 

    test.append(event_obj) 

# Create CSV file 
with open('Eventbrite_events.csv', 'w', newline='') as csvfile: 
    fields = ['name', 'images'] 
    writer = csv.DictWriter(csvfile, fieldnames=fields) 
    writer.writeheader() 
    writer.writerows(test) 

Vous pouvez également utiliser writerows() pour écrire toutes les lignes en une seule fois.

Cela vous donnera un fichier CSV comme suit:

name,images 
peter,https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F33500665%2F25911657759%2F1%2Foriginal.jpg?h=200&w=450&rect=0%2C581%2C6000%2C3000&s=bfaa2901b8c906a66c51563d15c6df12 
jim,https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F32935536%2F10115879927%2F1%2Foriginal.jpg?h=200&w=450&rect=0%2C40%2C624%2C312&s=c67e995e83234ab460707ac21f3541f8 

Vous pouvez également éviter de construire test comme suit une autre façon de renommer votre entrée:

import csv 

new = [ 
    {"name" : "peter", "picture" : "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F33500665%2F25911657759%2F1%2Foriginal.jpg?h=200&w=450&rect=0%2C581%2C6000%2C3000&s=bfaa2901b8c906a66c51563d15c6df12"}, 
    {"name" : "jim" , "picture" : "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F32935536%2F10115879927%2F1%2Foriginal.jpg?h=200&w=450&rect=0%2C40%2C624%2C312&s=c67e995e83234ab460707ac21f3541f8"}] 

# Create CSV file 
with open('Eventbrite_events.csv', 'w', newline='') as csvfile: 
    fields = ['name', 'images'] 

    writer = csv.DictWriter(csvfile, fieldnames=fields) 
    writer.writeheader() 

    for row in new: 
     row['images'] = row.pop('picture') 
     writer.writerow(row) 
0

Pandas est plus adapté à votre question.

import pandas as pd 

df = pf.DataFrame(list_of_dict) 

df.columns = ["name", "image or picture"] 

df.to_csv("test.csv", index=0)