資料內容長這樣
有沒有又快又彈性的方式呢?我想了一下,想到Python這個玩意,於是在網路上Google一下,發現這篇,喔耶,於是小弟拿了他的程式改了一下,其中最麻煩的地方是小弟的版本已經是Python3.4了,而且又是在Windows上執行,所以有遇到轉碼的問題,'cp950' codec can't encode character 'OOXX' in position.... 。小弟花費了一些時間處理轉碼問題並將資料轉入資料庫,果然是吉人自有天相呀!^^
小弟的流程如下,先使用urllib.request套件將資料下載本地端,在使用pypyodbc套件將資料傳入資料庫。
#getBike.py #!/usr/bin/env python import urllib.request import gzip import json import sys import pypyodbc #from pprint import pprint url = "http://data.taipei/youbike" urllib.request.urlretrieve(url, "YouBikeTP.gz") f = gzip.open('YouBikeTP.gz', 'r') #先轉碼,處理編碼問題(CP950) jdata = f.read().decode('utf-8').encode(sys.stdin.encoding, 'replace').decode(sys.stdin.encoding) f.close() data = json.loads(jdata) connection = pypyodbc.connect(r'Driver={SQL Server};Server=.;Database=OpenDataDB;Trusted_Connection=yes;') cursor = connection.cursor() for key,value in data["retVal"].items(): sno = value["sno"] sna = value["sna"] tot = value["tot"] sbi = value["sbi"] sarea = value["sarea"] mday = value["mday"] lat = value["lat"] lng = value["lng"] ar = value["ar"] sareaen = value["sareaen"] snaen = value["snaen"] aren = value["aren"] bemp = value["bemp"] act = value["act"] cursor.execute("insert into tempTabUbike values (?,?,?,?,?,?,?,?,?,?,?,?,?,?)", (sno,sna,tot,sbi,sarea,mday,lat,lng,ar,sareaen,snaen,aren,bemp,act)) connection.commit() connection.close()
有圖有真相
搞定收工!^^
PS:寫這篇希望有幫到賴姐!
沒有留言:
張貼留言