2020年1月29日 星期三

命令列執行的python程式 - 抓Json list超過時間的項目







本篇是寫一個在命令列執行的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)


---------------------------------------------------------------------------------------------------















沒有留言:

張貼留言

IKEA吊櫃廚櫃

 好不容易裝好IKEA買來的吊櫃,花了三天。 從組裝,鑽牆,上牆調水平,累死我了。