【发布时间】:2020-12-26 16:42:21
【问题描述】:
我正在研究一个示例,但遇到了一些问题。我是python的初学者,并尝试提高自己。我正在尝试使用 openweather api 并从中获取一些数据,然后将这些数据写入 csv 文件。我的代码的目的是输入一个包含城市名称的 txt 文件,我想获取城市名称、国家代码、纬度、温度、风速、风向。然后将它们写入 csv 文件。我可以输入 txt 文件或通过命令行输入获取数据,但不能两者兼得。而且我想将数据写入 csv 文件。请你帮助我好吗?我可以将其写入控制台,但我需要将它们写入 csv 文件。但是,我无法将我的 json 对象转换为 csv
我的输入.txt
Los Angeles
San Francisco
...
我的代码:
import requests
from pprint import pprint
import csv
import pandas as pd
file = input("Input the filepath: ")
with open(file) as f:
for line in f:
line = line.strip()
API_key = "MYAPIKEY"
base_url = "http://api.openweathermap.org/data/2.5/weather?"
headers = {'content-type': 'application/json'}
city_name = line
Final_url = base_url + "appid=" + API_key + "&q=" + city_name
weather_data = requests.get(Final_url).json()
print("\nCurrent Weather" + city_name + ":\n")
weather_data = requests.get(Final_url, headers=headers)
f = open('weather_data_file.csv', "w")
f.write(weather_data.text)
f.close()
print(f)
编辑后的问题:
CSV 文件只包含最后一个城市数据,数据不在 如果我用 excel 打开,格式正确
它输出的数据:
{"coord":{"lon":-122.42,"lat":37.77},"weather":[{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03d"}],"base":"stations","main":{"temp":284.74,"feels_like":280.59,"temp_min":283.15,"temp_max":286.48,"pressure":1024,"humidity":76},"visibility":10000,"wind":{"speed":5.1,"deg":260},"clouds":{"all":40},"dt":1609003065,"sys":{"type":1,"id":5817,"country":"US","sunrise":1608996226,"sunset":1609030632},"timezone":-28800,"id":5391959,"name":"San Francisco","cod":200}
【问题讨论】:
-
你能发布
weather_data,假设它不是太大吗? (然后只是一个示例)? -
已编辑问题,请您再看一遍@tdelaney
-
JSON 是表示数据的序列化字符串。您的
weather_data不是 JSON - 它是从 JSON 创建的 python 对象的集合。pd.from_json旨在反序列化 JSON 并从中拉出一个表(如果 JSON 看起来不像 pandas 的表,它会失败)。您可能能够创建像df = pd.DataFrame(weather_data)这样的数据框 - 假设weather_data是一个包含列表的字典。我们需要看数据才能知道。 -
现在你得到
weather_data两次——用第二个响应对象覆盖第一个json。您的原始代码正在执行pprint(weather_data)- 这是好东西。