批次下載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