要做的事情:一共十二個月的json數據(即12個json文件),json數據的一個單元如下所示。讀取這些數據,並求取各個(100多個)城市年、季度平均值。
{
"time_point": "2014-01",
"area": "***",
"aqi": "71",
"pm2_5": "47",
"pm10": "69",
"rank": "7"
}
我通過兩個步驟來實現這個事情,讀取json並導入sqlite,按需要查找數據庫數據並計算平均值。先導入數據庫這個舉動有些顯得多余,但是也讓數據井然有序地處理。
遍歷文件夾12個json文件用os.walk。在解析了json數據(例如,j = json.load(f))后,發現這個json數據是分兩層的,不過只要像dict一樣索引就可以了,無非是索引兩層(例如,data = j['rows'],pm25 = data[i]['pm2_5'],其中i是json單元個數遍歷)。接着就導入數據庫,第一部分做完。
從數據庫取值然后計算倒沒什么,就是取值rows = conn.execute("select ****") for row in rows 遍歷一下。有一個異常不得不提,最后平均值插入表時出現了:“sqlite3.ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings.” 在Stack Overflow找到回答:connection =sqlite3.connect(...) connection.text_factory = str。也沒深究,問題解決了。涉及到中文很容易出現這個毛病。
