2013-07-19 5 views
0

Я думаю, что что-то не так в моем коде, но в командной строке не говорится, что есть ошибка.Почему не печатает мои данные python csv?

Я написал код неправильно для открытия? я хочу, чтобы данные с URL-адреса я положил (так что я написал хороший код) и печатаю новые данные по старым данным без создания нового заголовка (потому что я буду запускать его каждый час).

Вот результат, который я хочу.

result

вот мой код:

#Source : http://www.wunderground.com/weather/api/d/docs?d=resources/code-samples 
import urllib2 
import json 
import time 
import csv 
from datetime import datetime#set the time 

def get_information(url): 
    try: 
    wunder_url_obj = urllib2.urlopen('http://api.wunderground.com/api/8d3b5d3fa03ddb6f/conditions/weather/q/China/Beijing.json') 
    except: 
    print 'Could not open URL' 
    return None 

    else: 
    now = datetime.now() 
    current_year = now.year 
    current_day = now.day 
    current_month = now.month 
    current_hour = now.hour 
    current_minute = now.minute 
    current_second = now.second 
    json_string = wunder_url_obj.read() 
    parsed_json = json.loads(json_string) 
    temp_f = parsed_json['current_observation']['temp_f'] 
    weather = parsed_json['current_observation']['weather'] 
    date = str(now.month) + "/" + str(now.day) + "/" + str(now.year) + " " +  str(now.hour) + ":" + str(now.minute) + ":" + str(now.second) 
    return ','.join([date, weather, str(temp_f)]) + '\n' 
    now = datetime.now()  
    header = "Datetime,current condition,Temperature,\n" 

    f = open('out.csv','a') 
    prev_data = open('out.csv', 'r').read() 



# Add a header only if the file is empty 
    if prev_data == '': 
    f.write(header) 

    f.write(','.join([date,str(temp_f),weather])) 
    f.write('\n') 
    f.close() 

и в моем редакторе:

enter image description here

+1

вы когда-либо обратитесь к 'get_information (URL)' метод? Я просто вижу, что вы определяете функцию, а не называете ее. – roippi

ответ

1

Это не выглядит, как вы когда-нибудь позвонить get_information.

Существует также return ','.join([date, weather, str(temp_f)]) + '\n', который может помешать предполагаемому поведению.

Вот исправление:

#Source : http://www.wunderground.com/weather/api/d/docs?d=resources/code-samples 
import urllib2 
import json 
import time 
import csv 
from datetime import datetime#set the time 

def get_information(url): 
    try: 
    wunder_url_obj = urllib2.urlopen(url) 
    except: 
    print 'Could not open URL' 
    return None 

    else: 
    now = datetime.now() 
    current_year = now.year 
    current_day = now.day 
    current_month = now.month 
    current_hour = now.hour 
    current_minute = now.minute 
    current_second = now.second 
    json_string = wunder_url_obj.read() 
    parsed_json = json.loads(json_string) 
    temp_f = parsed_json['current_observation']['temp_f'] 
    weather = parsed_json['current_observation']['weather'] 
    date = str(now.month) + "/" + str(now.day) + "/" + str(now.year) + " " +  str(now.hour) + ":" + str(now.minute) + ":" + str(now.second) 
    now = datetime.now()  
    header = "Datetime,current condition,Temperature,\n" 

    f = open('out.csv','a') 
    prev_data = open('out.csv', 'r').read() 



    # Add a header only if the file is empty 
    if prev_data == '': 
    f.write(header) 

    f.write(','.join([date,str(temp_f),weather])) 
    f.write('\n') 
    f.close() 

get_information('http://api.wunderground.com/api/8d3b5d3fa03ddb6f/conditions/weather/q/China/Beijing.json') 

Результат:

bash$ cat out.csv 
Datetime,current condition,Temperature, 
7/18/2013 23:14:6,82,Haze 
7/18/2013 23:14:7,82,Haze 
+0

Спасибо mgamba, поэтому проблема заключалась в функции возврата, url и получении информации, которую я забыл вызвать (_ _). Просто для информации, если я хочу открыть только один раз out (потому что, как мы видим, я ставлю два open(). Можно ли сделать один для одного open()?, чтобы сохранить результат, который мне нужен? – Nardrek

+1

Извините, я не знаком с python. Согласно [This SO question] (http://stackoverflow.com/ вопросы/2757887/file-mode-for-creationreadingappendingbinary), 'a +' может быть тем, что вы ищете. – mgamba

+0

Нет проблем! Спасибо за вашу помощь :) Очень ценю это. – Nardrek

Смежные вопросы