本篇是寫一個在命令列執行的Python程式,功能是抓Json list裡超過基準時間的項目。這個程式特別在要保持可攜性,因為Python程式如果要求要一堆特別的套件,才能實現功能,交給同事使用時,就會很難正常使用。這個Python程式的原則是,只處理shell script不容易作到的事情,其它盡量在命令列模式下完成,使用時指令會像下列格式:
python parse.py list.json 2019-12-05T03:28:14Z > id.txt
輸入和輸出都是靠命令列完成,Python不用管太多。
以下Python程式還是要裝Python-dateutil或py-dateutil套件,但已經非常精簡,而且不分Python版本都能執行:
-----------------------------------------------------------------------------------------------------------------------------
import sys import json import dateutil.parser # 檔案名,此檔包含從ckan抓回來的,資料集內的檔案清單 jsonFile = sys.argv[1] # 基準時間,時間格式是ISO 8601 baseTime = sys.argv[2] # 將Dataset的資料JSON讀出來 with open(jsonFile, 'r') as f: try: jsonDatasetMeta = json.load(f) except: print('-1') print('JSON format error') exit(1) # 將基準時間轉成時間變數 try: lastTime = dateutil.parser.parse(baseTime) except: print('-1') print('base time error') exit(1) if 'result' not in jsonDatasetMeta: print('-1') print('JSON file content error: result not in jsonDatasetMeta') exit(1) if 'resources' not in jsonDatasetMeta['result']: print('-1') print('JSON file content error: resources not in jsonDatasetMeta') exit(1) try: for file in jsonDatasetMeta['result']['resources']: fileCreated = dateutil.parser.parse(file['created'] + 'Z') if fileCreated > lastTime: print(file['url']) except Exception as e: print('-1') print('File created time error.') print(e) exit(1)
---------------------------------------------------------------------------------------------------
沒有留言:
張貼留言