Link Search Menu Expand Document

批次下載CODiS數據

Table of contents

背景

  • 這一系列的作業就是運用前述的python檔,執行一天~一年數據的下載。
  • 有可能中央氣象局來不及在每天中午完成數據的上載,或網路連線出現問題,有可能每天中午下載的檔案全為NaN值,會需要重做,目前仍以目視檢查、手動啟動方式進行。重作時也是運用此處的腳本來進行。

每日下載

  • 腳本下載:get_cwb.sh
  • 因應網路可能斷線,需得知目錄下最後的日期為何($last),從該日到昨日($yesd)進行下載。可行的方式與考量如下:
    • 從當年度1月1日開始檢查,如果檔案已經存在,則跳過不執行。此舉每天進行似乎不是很有效率。
    • 計算$last$yesd之間的日數,逐日進行。似乎為較合理方案。
      • 以bash的date來計算日數:需將日期轉換為時間戳,計算時間戳的差異,併除以全日的秒數來求得差異天數。此舉甚是麻煩。
      • 以python的datetime來計算差異天數。需在命令列執行python片段,並將結果另存成環境變數。程式較為單純。
  • 如果檔案正常下載,則進行little-r格式的轉換,詳add_srfFF
dir=/home/backup/data/cwb/e-service/read_web
today=$( date "+%Y%m%d" )
yesd=$( date -ud "$today -1days" +%Y%m%d )
y=$( date -ud $yesd +%Y )
DATE=$yesd
mkdir -p $dir/../$y
cd $dir/../$y
last=$(ls -rt *csv|tail -n1|cut -c 4-11)
if [ -z $last ];then
  last=$yesd
  days=1
else
  cmd="from datetime import datetime as dt;a=dt.strptime('"$yesd"','%Y%m%d');b=dt.strptime('"$last"','%Y%m%d');print ((a-b).days)"
  days=`python -c "$cmd"`
fi
for ((day=1;day<=$days;day++));do
  DATE=$( date -ud "$last +${day}days" +%Y-%m-%d )
  echo $DATE $days
  $dir/rd_cwbDay.py -d $DATE
done

sz=$(ls -lrt *.csv|tail -n1|/usr/kbin/awkk 5)
if [ $sz -gt 138 ];then
  mkdir -p /home/backup/data/NOAA/NCEP/cwb_data/cwbsrf/$y
  cd /home/backup/data/NOAA/NCEP/cwb_data/cwbsrf/$y
  add_srfFF.py
fi

全年下載

  • 要補足之前年度的數據,須逐年、逐日進行下載。
  • 因為有2種格是的日期,檔案名稱(+%Y%m%d)、啟動下載python程式(+%Y-%m-%d),所以需要先產生2個日期的環境變數
  • 如果檔案已經存在,則略過不執行
  • 如果不存在,則進行python程式進行下載。
  • 因適用所有年度,須對閏年特別處理
#kuang@master /home/backup/data/cwb/e-service
#$ cat get_cwbYr.sh
dir=/home/backup/data/cwb/e-service/read_web
yr=$1
begD=0
endD=364
today=${yr}-01-01
test $(( $yr % 4 )) == 0 && endD=365
for ((i=$begD;i <= $endD; i+=1));do
  DATE=$( date -ud "$today +${i}days" +%Y-%m-%d )
  DAT2=$( date -ud "$today +${i}days" +%Y%m%d )
  y=$( date -ud $DATE +%Y )
  mkdir -p $dir/../$y
  cd $dir/../$y
  if [[ -e cwb${DAT2}.csv ]];then continue;fi
  $dir/rd_cwbDay.py -d $DATE
done

全月下載

  • 要在短時間內下載數據,需要在不同的目錄啟動同步下載,以避免發生暫存檔重疊的情況。
  • 前述分年度下載有個別的目錄可以儲存,因此如果是逐月下載,就需要在年度下另建月份的目錄,以儲存個別的暫存檔。
  • 每月的長度不一樣。此處以if判別式來定義。
#kuang@master /home/backup/data/cwb/e-service
#$ cat get_cwbYrMn.sh
dir=/home/backup/data/cwb/e-service/read_web
yr=$1
mn=$2
begD=0
endD=30
today=${yr}-${mn}-01
if [[ $mn == "02" ]];then
  endD=27
  test $(( $yr % 4 )) == 0 && endD=28
elif [[ $mn == "04" ]] || [[ $mn == "06" ]] || [[ $mn == "09" ]] || [[ $mn == "11" ]];then
  endD=29
fi
for ((i=$begD;i <= $endD; i+=1));do
  DATE=$( date -ud "$today +${i}days" +%Y-%m-%d )
  DAT2=$( date -ud "$today +${i}days" +%Y%m%d )
  y=$( date -ud $DATE +%Y )
  m=$( date -ud $DATE +%m )
  mkdir -p $dir/../$y/$m
  cd $dir/../$y/$m
  if [[ -e cwb${DAT2}.csv ]];then continue;fi
  $dir/rd_cwbDay.py -d $DATE
done