On 06Sep2018 12:32, Brandon Creech <[email protected]> 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 <[email protected]>
_______________________________________________
Tutor maillist - [email protected]
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor