本篇是寫一個在命令列執行的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)
---------------------------------------------------------------------------------------------------
沒有留言:
張貼留言