Python Forum
Exporting Json events to a text file - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Exporting Json events to a text file (/thread-12351.html)



Exporting Json events to a text file - uklipse - Aug-21-2018

Hi, I was given a Python script from a vendor to pull down events from their API. The script works but I need to save these events to a file and not just view them. I'm not that familiar with Python but have a general understanding of programming. When I run the code below, it generates my text file but it only saves the last event pulled from the API and oddly saves two entries for it in the text file. In the code, I see a while loop and for loop and I think my json.dump command is inside both loops and therefore creating two entries in the text file. I've tried moving it outside each loop but not dice.

Any ideas would be appreciated!

    while True:
        data = export_events(token, event_type, batch_size, start_date, end_date, client_id, client_secret)

        total_events = total_events + len(data)
        if data is None:
            break
        elif len(data) == 0:
            break
        else:
		        for event in data:
    			    with open('jsonfile.txt','w') as outfile:
				                   json.dump(data,outfile, indent=2, sort_keys=True)  
			        print json.dumps(data, indent=2, sort_keys=True)



RE: Exporting Json events to a text file - buran - Aug-21-2018

you open and close the output file for each event in 'w' mode. That means you overwrite what is already in the file. second you dump the event twice - both on lines 12 and 13 and that is why you have two times the same event.
You need to open the file at the beginning. Also note that (assuming all events come as one json) you don't need to loop. Just dump the whole data json at once.
Also note that you cannot add to a json file. i.e. if you want to add new downloaded events to previously downloaded events you need to read the file content in memory, add what you downloaded this time and then dump everything in the file.


RE: Exporting Json events to a text file - uklipse - Aug-21-2018

Thanks for the quick response. I don't believe the data comes all at once. The only lines I added to the code were the 'with open...' and 'json.dump...' lines. The others were already there so I think the while loop is to read from all the data and just print it to the screen. The script when running will display all the data but not save it.


RE: Exporting Json events to a text file - buran - Aug-21-2018

(Aug-21-2018, 02:08 PM)uklipse Wrote: he others were already there so I think the while loop is to read from all the data and just print it to the screen
That exactly means all events come as one json. They loop over events in order to print them on separate lines. Otherwise thej will print everything on one line.
try
while True:
    data = export_events(token, event_type, batch_size, start_date, end_date, client_id, client_secret)
    if data:
        with open('events.json','w') as outfile:
            json.dump(data,outfile, indent=2, sort_keys=True)