CSVを読み込みクラスオブジェクトを配列に入れる
CSV例,6列必要。1行目は除外する。米ヤフーファイナンスから日経平均株価データを取得すると、今日の分は取得できるのに、なぜか前日のデータが時間帯によって取得できない。そのため、取得できたデータと取得できないデータをCSVにしておいて使用する。
日付,高値,安値,始値,終値,調整終値
となっている。
index High Low Open Close AdjClose 列数チェックが必要 2021-01-07,27624.730469,27340.460938,27340.460938,27490.130859,27490.130859 2021-01-08,28139.029297,27667.750000,27720.140625,28139.029297,28139.029297 2021-01-12,28287.369141,27899.449219,28004.369141,28164.339844,28164.339844 2021-01-13,28140.10,28503.43,28139.66,28456.59,28456.59 2021-01-14,28979.529297,28411.580078,28442.730469,28698.259766,28698.259766
クラスから実際のデータを取得するときは
df[0].indexとかdf[0].closeみたいにして取得する。つまり1行分が1オブジェクトの配列として登録されている。
#CSVにするときは、列数があっているかをチェックする。ヤフーファイナンスはAdjCloseがあるが、ほかはCloseしかない。 import os import pandas_datareader.data as data from datetime import datetime,timedelta #日経平均株価データのクラスオブジェクト、カプセルデータ class nikkeiClass: def __init__(self, cindex, chigh,clow,copen,cclose,cadjclose): self.index = cindex self.high = chigh self.low = clow self.open = copen self.close = cclose self.adjclose = cadjclose ######################### end = datetime.now() #start = datetime(end.year, end.month, end.day-8)#こっちだと月マタギでエラーになる。 start = end - timedelta(days=7) print('start:',start.strftime("%Y/%m/%d")) print('today:',end.strftime("%Y/%m/%d")) df=[] checkLineCount=0 #CSVを読み込む ifile='/Users/toshiromaseda/Documents/blender/script/2021年1月14日日経.csv' try:#ファイルが存在しないときのエラー処理try with open(ifile,'tr') as fin: for iline in fin: #try: tmp=iline.strip().split(",")#stripしてからsplit()だと理解している。 if 'High' in tmp[0]: continue if len(tmp) < 6:#全部で6列存在する。 print('ERROR 列の数があっていません。少ないようです。行数:',checkLineCount) break #here df.append(nikkeiClass(tmp[0],tmp[1],tmp[2],tmp[3],tmp[4],tmp[5])) checkLineCount+=1 except FileNotFoundError as e: # FileNotFoundErrorは例外クラス名 print("ファイルが見つかりません。パス、ファイル名を確認してください", e) ifile.close() sys._exit()#ファイルがなければ終了 print(df[0].index) for f in df: print('日付:',f.index) print('END')