0

I made this code where the purpose its to retrieve data from an API from a certain number of stock tickers

    import requests
    import json
    import csv
    tickers = open("ticker_list.txt","r")
    for ticker in tickers:
        ticker = ticker.strip()
        url = "https://xxx/wallstreetbets/"+ticker
        headers = {'accept': 'application'}
        r = requests.get(url, headers=headers)
        data = r.json()
        json_string = json.dumps(data, indent=1)
        for tick in data:
            print(tick ['Date'],tick['Mentions'])

This returns for every ticker an output like this

    2018-08-10 1
    2018-08-28 1
    2018-09-07 1
    2018-10-09 1
    2018-10-18 1
    2018-11-28 1
    2019-01-04 1
    2019-01-08 1
    2019-01-10 1
    2019-01-16 5
    2019-01-23 1
    2019-01-24 1

Where we have the date on the left, and the number of mentions on the right after a space.

What I want to do now is to store this result into a csv file where I have date, mentions in column so that when i open the csv file with excel I have:

    2018-08-10,1
    2018-08-28,1
    2018-09-07,1
    ...

Thanks in advance for the answers!

2 Answers 2

1

You can use Python3's csv.writer() function.

The given example looks like this:

import csv
with open('eggs.csv', 'w', newline='') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter=' ',
                            quotechar='|', quoting=csv.QUOTE_MINIMAL)
    spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
    spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

In your specific case you would write:

import requests
import json
import csv
tickers = open("ticker_list.txt","r")
for ticker in tickers:
    ticker = ticker.strip()
    url = "https://xxx/wallstreetbets/"+ticker
    headers = {'accept': 'application'}
    r = requests.get(url, headers=headers)
    data = r.json()
    json_string = json.dumps(data, indent=1)
    
    # new code vvv
    with open("filename.csv", 'w', newline='') as csv_file:
        for tick in data:
            csv_writer = csv.writer(csv_file)
            csv_writer.writerow([tick['Date'], tick['Mentions']])
Sign up to request clarification or add additional context in comments.

2 Comments

Works perfectly! (you missed a square braket at the end but thats ok), thanks a lot!!
Glad it works! Added the missing bracket too, thanks for pointing it out :)
1

You can do:

import csv
.
.
.
with open('filename.csv', 'a+', newline='') as csvfile:
    fieldnames = ['Date', 'Mentions']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    for tick in data:
        writer.writerow({'Date': tick['Date'], 'Mentions': tick['Mentions']})

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.