使用IF语句写入文件

0 投票
2 回答
2731 浏览
提问于 2025-04-18 08:58

我正在使用Weather Underground的API来把历史天气数据写入一个csv文件。我的Python程序运行得很好,没有任何问题。不过,我想加一个条件语句,让我的程序只记录包含下雨的天气观察数据。也就是说,如果在观察点j时底特律下雨,就记录下这个小时的天气情况、下雨、下雪和温度(华氏)。

下面是程序的最后一部分。“for j in range”是用来遍历某一天的天气观察数据。“rain”是一个二进制值,表示是否下雨。

再次强调,程序的其他部分都运行得很好。我唯一做的改动就是加了“if rain == 0:”这行代码……结果现在数据没有写入我的csv文件。也没有出现错误信息。

任何帮助都非常感谢。

保罗

  for j in range(len(parsed_json['history']['observations'])):
            hour = parsed_json['history']['observations'][j]['date']['hour']
            conditions = parsed_json['history']['observations'][j]['conds']
            rain = parsed_json['history']['observations'][j]['rain']
            snow = parsed_json['history']['observations'][j]['snow']
            temp_f = parsed_json['history']['observations'][j]['tempi']

            if rain == 0: 
                myfile.write('\n')
                myfile.write(str(dd[i]))
                myfile.write(',')
                myfile.write(str(hour))
                myfile.write(',')
                myfile.write(str(cities[b]))
                myfile.write(',')
                myfile.write(str(temp_f))
                myfile.write(',')
                myfile.write(str(conditions))
                myfile.write(',')
                myfile.write(str(rain))
                myfile.write(',')
                myfile.write(str(snow))
                myfile.write(',') 

2 个回答

0

这不是语法问题,比如用 === 和 == 的区别,对吧?你可以试试用'snow'或者其他变量,或者加一个调试语句来显示rain的值。这是基于你输出到CSV文件的语句是有效的。距离我上次看Python已经有一段时间了。你可以把rain强制设为0,然后检查记录是否被添加到CSV中,以确保输出是正常的。然后再回过头来找出rain为什么不是0的原因。希望这些建议对你有帮助,并能激发其他想法。

1

用这样的索引(j)确实有点奇怪,如果你不想把数据写出来,那为什么还要解析这些数据呢?为什么不直接这样做:

for obs in parsed_json['history']['observations']:
    if obs['rain']: # or 'if not', depending on which you want
        hours = obs['date']['hour']
        ...
        myfile.write(...)
        ...

如果没有看到数据的样本,就很难判断是否有什么东西应该放进myfile里。

撰写回答