I am having problems exporting certain items in a dictionary to CSV. I can export 'name' but not 'images' (the image URL).
This is an example of part of my dictionary:
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 (I made a mistake with the naming as was what pointed out. It seems to work now after updating it).
And this is the code I have written (which works for 'name' but not 'picture'):
import csvtest = []for document in new:event_obj = {}# Get nameevent_obj['name'] = document['name']# Get imagesevent_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)
Your new
list contains dictionaries with the key picture
but you were trying to access one called images
.
import csvnew = [{ "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 nameevent_obj['name'] = document['name']# Get imagesevent_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)
You could also make use of writerows()
to write all the rows in one go.
This would give you a CSV file as follows:
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
You could also avoid building test
as follows as an alternative way to rename your entry:
import csvnew = [{"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)