|
我將 OTC_CLOSE.py 做了些修改,請看標注紅色的部份,因功力不好只能改成自己勉強使用。
直接下載CSV存檔目錄 C:\mySTock\OTC\CLOSE
修改轉成TXT存檔目錄 C:\mySTock\OTC\AB
import sys
import urllib.request
import os.path
import time
import datetime
from datetime import datetime, timedelta
import re
import win32com
from win32com.client import Dispatch, constants
from win32com.client import DispatchEx
p = re.compile('["]([^"]*)["]')
#櫃買 960701 RSTA3104_1021230.csv
# import urllib.request
# strOTCURL='http://www.gretai.org.tw/ch/stock/aftertrading/DAILY_CLOSE_quotes/RSTA3104_' #960702.csv
# http://www.otc.org.tw/ch/stock/a ... 0&se=EW&s=0,asc,0
# SQUOTE_EW_1021230.csv
strOTCURL='http://www.otc.org.tw/ch/stock/aftertrading/otc_quotes_no1430/stk_wn1430_download.php?d=' #1021230.csv
today = datetime.today()
yesterday=today
dayback=sys.argv[1] #下載資料日數[以今日起算]
outPATH= sys.argv[2] #檔案輸出目錄
if dayback=='':
daynumMAX=1
else:
if int(dayback)>0:
daynumMAX=int(dayback)
else:
daynumMAX=1
for i in range(1,daynumMAX):
yesterday = yesterday - timedelta(1)
#檢查輸出目錄是否存在
cond1=os.path.exists(outPATH)
if (not cond1):
try:
os.system('mkdir '+outPATH)
cond1=1
except IOError as IOE :
print ('輸出目錄' +outPATH +' 無法建立')
cond1=0
#確認輸出目錄建立成功,才進行
if(cond1):
#檢查輸出目錄是否存在
outDST=outPATH+'CLOSE\\'
cond1A=os.path.exists(outDST)
if (not cond1A):
try:
os.system('mkdir '+outDST)
cond1A=1
except IOError as IOE :
print ('輸出目錄' +outDST +' 無法建立')
cond1A=0
#檢查輸出目錄是否存在
outAB=outPATH+'AB\\'
cond2A=os.path.exists(outAB)
if (not cond2A):
try:
os.system('mkdir '+outAB)
cond2A=1
except IOError as IOE :
print ('輸出目錄' +outAB +' 無法建立')
cond2A=0
#開始下載
for daynum in range(1,daynumMAX+1):
inputEntry = yesterday.strftime('%Y_%m_%d').split('_')
#日期檢查
YYYY= inputEntry[0]
MM= inputEntry[1]
DD=inputEntry[2]
TAIYYYY=int(YYYY)-1911
if int(YYYY) >2000:
if TAIYYYY<100:
YYYY1='%02d'%(TAIYYYY)
else:
if TAIYYYY <1000:
YYYY1='%03d'%(TAIYYYY)
else:
YYYY1='%04d'%(TAIYYYY)
else:
today = datetime.today()
autoentry=today.strftime('%Y_%m_%d').split('_')
TAIYYYY1=int(autoentry[0])-1911
if TAIYYYY1 < 100:
YYYY1='%02d'%(TAIYYYY1)
else:
if TAIYYYY1 < 1000:
YYYY1='%03d'%(TAIYYYY1)
else:
YYYY1='%04d'%(TAIYYYY1)
print('\n(%04d'%daynum+'/%04d'%daynumMAX+'):'+YYYY+MM+DD+' 開始')
#上市每日收盤行情
condIDX1=0
condIDX2=0
strOTCIDX1=strOTCURL+YYYY1+'/'+MM+'/'+DD+'&se=EW&s=0,asc,0'
strDSTIDX1=outDST+'SQUOTE_EW_'+YYYY+MM+DD+'.csv'
Cond2=os.path.exists(strDSTIDX1)
if not Cond2:
print ('連線')
for retryCount in range(0,3):
try:
time.sleep(0.2)
condIDX1=urllib.request.urlopen(strOTCIDX1)
if (condIDX1):
#strOTCIDX2=strOTCURL+YYYY1+MM+DD+'.csv'
strOTCIDX2=strOTCIDX1
condIDX2=urllib.request.urlretrieve(strOTCIDX2,strDSTIDX1)
break
except IOError as IOE :
time.sleep(2)
condIDX1=0
condIDX2=0
print ('出現連線問題: 嘗試',retryCount)
if condIDX1 and condIDX2:
print('(%03d'%daynum+') (1): '+strDSTIDX1+' 下載完成')
else:
if condIDX1:
print('(%03d'%daynum+') (1): '+strDSTIDX1+' 下載失敗')
condIDX1=0
condIDX2=0
else:
print(" 警告 ("+YYYY+MM+DD+") 並不是交易日")
condIDX1=0
condIDX2=0
else:
condIDX2=1
print(strDSTIDX1+"已經存在")
if (condIDX2 and os.path.getsize(strDSTIDX1) <=2048):
print(" 警告 ("+strDSTIDX1+") 不是一個有效的檔案, ("+YYYY+MM+DD+") 並不是交易日\n")
os.remove(strDSTIDX1)
condIDX1=0
condIDX2=0
else:
if condIDX2:
Cond1=os.path.exists(strDSTIDX1)
if Cond1:
sectionstart=0
u1=open(strDSTIDX1)
rows = u1.read().split('\n')
outfileT1=outAB+YYYY+MM+DD+'.txt'
f1 = open(outfileT1, 'w')
print(' 產生' + outfileT1+' 中')
#f.write('證券代號,證券名稱,成交股數,成交筆數,成交金額,開盤價,最高價,最低價,收盤價,漲跌(+/-),漲跌價差,最後揭示買價,最後揭示買量,最後揭示賣價,最後揭示賣量,本益比'+'\n')
for row in rows:
row=p.sub(lambda m: m.groups()[0].replace(',',''), row)
row=row.replace('=','')
#row=row.replace('"','')
#print(row)
if ('代號' in row):
#代號,名稱,收盤,漲跌,開盤,最高,最低,均價,成交股數 ,成交金額(元),成交筆數 ,最後買價,最後賣價,發行股數 ,次日參考價 , 次日漲停價 ,次日跌停價
#代號,名稱,收盤,漲跌,開盤,最高,最低,成交股數,成交金額(元),成交筆數,最後買價,最後賣價,發行股數,次日漲停價,次日跌停價
sectionstart=1
# if ('上櫃家數:' in row):
if ('共' in row):
sectionstart=0
if (sectionstart==1 and (row!='')):
if ('代號' in row):
f1.write('證券代號,日期,開盤價,最高價,最低價,收盤價,成交張數\n')
else:
item=row.split(',')
if ((len(item[0])<=5) and (item[2]!=" ---") and (item[2]!="0.00") and (item[7]!="0")):
# f1.write(item[0]+'.TW,'+YYYY+'/'+MM+'/'+DD+','+item[4]+','+item[5]+','+item[6]+','+item[2]+','+str(float(item[8])/1000)+','+item[1]+','+item[10]+','+item[9]+','+item[3]+','+item[11]+','+item[12]+'\n')
f1.write(item[0]+','+YYYY+'/'+MM+'/'+DD+','+item[4]+','+item[5]+','+item[6]+','+item[2]+','+str(float(item[7])/1000)+'\n')
f1.close()
u1.close()
print(' OTC盤後資料 (' + outfileT1+') 完成\n')
yesterday = yesterday + timedelta(1)
else:
print('指定輸出目錄: ('+outPATH+') 無法建立')
print('盤後資料下載完成')
|
|