以pm25.in網站資料為例。
首先感謝pm25.in提供了優質的空氣污染資料,為他們的辛勤勞動點個贊。是python3.3,windows系統,讀取資料的時候用到了python的json處理的4個方法,很經典常用。所謂4個方法是:
a) json.loads()
輸入string,傳回json。
b) json.dumps()
輸入json類型的資料,傳回包含json資料的string,可以這樣用的好處是可以進行按key字典排序,json.dumps( json_res, sort_keys=True).
c) json.load()
輸入類檔案對象,傳回json對象,
json.load(fp, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
d) json.dump()
輸入json對象,用法:
json.dump(obj,fp,skipkeys=False,ensure_ascii=True,check_circular=True,allow_nan=True,cls=None, indent=None, separators=None,default=None,sort_keys=False, **kw),obj是json對象,fp是要儲存的檔案。
說明:
包含utf-8編碼的html在被windows系統下儲存時,會在檔案頭有BOM,ultraedit編輯器十六進制看到開頭是EF BB BF,這個事情很搗亂,導緻讀取json資料檔案時報錯,解決辦法是:data_file = open(r'c:\Python33\all_data',encoding='utf_8_sig').read()
加上encoding='utf_8_sig',否則一個json資料開頭為BOM标記,整個程式無法識别。
還有要注意,整個傳遞值的時候,必須統一用utf-8編碼,一但不用會産生很多混亂,開始沒有注意耽誤了不少時間。如
# 請求資料
def requestData( data_file):
# 輸入str,傳回json資料
json_res = json.loads(data_file, encoding='utf-8')
# 輸入json,傳回str,目的是排序
encodedjson = json.dumps(json_res, sort_keys=True)
# 輸入str,傳回json,務必要以utf-8加載json資料
decodejson = json.loads(encodedjson, encoding='utf-8')
return decodejson
json資料分為兩類:
一個是對象,如{'a':1,'b':2},或者{'c':3,'d':4},對應python裡的dict
一個是json數組,[{'a':1,'b':2},{'c':3,'d':4}],相當于2維數組,相當于python的一個list,dict裡的對象的位置是随機的,要想用固定順序需要用dict = collections.OrderedDict(),如本來是{'a':1,'b':2},普通dict輸出可能是{'b':2,'a':1},隻有OrderDict才是保證{'a':1,'b':2}這樣的輸出。
codecs.open(out_file, 'a', 'gbk')
dictWriter = csv.DictWriter(f, list(d.keys()))
dictWriter.writeheader()是寫excel檔案的列名,隻寫一次, dictWriter.writerow(d)是按行寫資料。
PS: 如果想要加入crontab 需要在檔案頭加#!/usr/bin/python,否則不行。
下面全部程式:
<a></a>
沒有整理與歸納的知識,一文不值!高度概括與梳理的知識,才是自己真正的知識與技能。 永遠不要讓自己的自由、好奇、充滿創造力的想法被現實的架構所束縛,讓創造力自由成長吧! 多花時間,關心他(她)人,正如别人所關心你的。理想的騰飛與實作,沒有别人的支援與幫助,是萬萬不能的。
本文轉自wenglabs部落格園部落格,原文連結:http://www.cnblogs.com/arxive/p/6193444.html,如需轉載請自行聯系原作者