On 06Sep2018 12:32, Brandon Creech <bdcreec...@gmail.com> wrote:
Hi, I am working to forecast the temperatures for the next 5 days using an
API and a for loop. I would like write the output of this loop to a csv in
this format::

Columns: City, min1, max1, min2, max2,min3,max3,min4,max4,min5,max5
data:         Athens,Greece 25.4,26.7....etc.
                Nantou,Taiwan 16.18, ......etc

the data prints out on top of each other like this:

Nantou, Taiwan 29.49 20.79
Nantou, Taiwan 30. 49 21.56

Normally there would be more commas in CSV output, eg:

 Nantou, Taiwan,29.49,20.79

and because "Nantou, Taiwan" is a single string, it would typically look like this:

 "Nantou, Taiwan",29.49,20.79

to make that clear, otherwise the embedded comma would make it two CSV columns.

Code I have:

from forecastiopy import *
import csv

I see you're importing the csv module, but not using it. [...]

[...snip...]
for city, coords in cities.items():
   weather = ForecastIO.ForecastIO( api_key, latitude=coords[0],
longitude=coords[1] )
   daily = FIODaily.FIODaily(weather)
   for day in range(2,7):
       print(str(city) + " " + str(daily.get_day(day)['temperatureMax']) +
" " + str(daily.get_day(day)['temperatureMin']))

First a small suggestion. Change this:

 print(str(city) + " " + str(daily.get_day(day)['temperatureMax']) + " " + 
str(daily.get_day(day)['temperatureMin']))

like this:

 day_data = daily.get_day(day)
 print(str(city) + " " + str(day_data['temperatureMax']) + " " + 
str(day_data['temperatureMin']))

It fetches the daily data just once and makes your subsequent code easily to read and debug.

Second, your actual problem. Your loop is basicly sound, but you're using a print call for the output. The csv module provides a writer object which does all the heavy lifting for you: turns strings into quotes strings, puts in commas, etc. Try this change:

 csvw = csv.writer(sys.stdout)
 for city, coords in cities.items():
     weather = ForecastIO.ForecastIO( api_key, latitude=coords[0], 
longitude=coords[1] )
     daily = FIODaily.FIODaily(weather)
     for day in range(2,7):
         day_data = daily.get_day(day)
         csvw.writerow([city, day_data['temperatureMax'], 
day_data['temperatureMin']])

You'll also need to "import sys" up the top to use the name "sys.stdout".

See how now you're just passing a list of the values to the csv writer?

Cheers,
Cameron Simpson <c...@cskk.id.au>
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to