import requests
import zipfile
import pandas as pd
from datetime import datetime, date, timedelta
import os
import sys
"""
URLを指定してカレントディレクトリにファイルをダウンロードする
"""
def download_file(url):
□□filename = url.split('/')[-1]
□□r = requests.get(url, stream=True)
□□with open(filename, 'wb') as f:
□□□□for chunk in r.iter_content(chunk_size=1024):
□□□□□□if chunk:
□□□□□□□□f.write(chunk)
□□□□□□□□f.flush()
□□□□return filename
□□
□□# ファイルが開けなかった場合は False を返す
□□return False
"""
ファイル名を指定してzipファイルをカレントディレクトリに展開する
"""
def zip_extract(filename):
□□target_directory = '.'
□□zfile = zipfile.ZipFile(filename)
□□zfile.extractall(target_directory)
"""
CSVファイルを読みこみ必要な株価データを取得する
"""
def get_kabuka_list(csv_filename, codes):
□□df = pd.read_csv(csv_filename,
□□□□□□□□□□ header=None,
□□□□□□□□□□ index_col=0,
□□□□□□□□□□ encoding="shift-jis")
□□
□□# 指定した証券コードの行に絞り込む
□□# 1: 証券コード
□□# 9: 取引所名
□□df = df[df[1].isin(codes) & (df[9] == "東証1部")]
□□
□□# 必要なカラムのみに絞り込む
□□# 1: 証券コード
□□# 5: 高値
□□# 6: 安値
□□# 7: 終値
□□# 8: 出来高
□□df = df[[1, 5, 6, 7, 8]].rename(columns={1:'code', 5:'高値', 6:'安値', 7:'終値', 8:'出来高'})
□□return(df)
"""
指定した日付のzipファイル名を取得
"""
def get_filename(date):
□□yymmdd = datetime.strftime(date, '%Y%m%d')[-6:]
□□filename = "T" + yymmdd + ".zip"
□□return(filename)
"""
指定した日付のURLを取得
"""
def get_url(date):
□□yyyy = datetime.strftime(date, '%Y')
□□yy_mm = datetime.strftime(date, '%Y_%m')[-5:]
□□yymmdd = datetime.strftime(date, '%Y%m%d')[-6:]
□□url = "http://mujinzou.com/k_data/" + yyyy + "/" + yy_mm + "/T" + yymmdd + ".zip"
□□return(url)
"""
本処理
"""
root_dir = ".."
code_list = "4719,6702"
codes = code_list.split(",")
yesterday = datetime.today() - timedelta(days=1)
# ダウンロードする
zip_filename = get_filename(yesterday)
if (os.path.exists(zip_filename)):
□□os.remove(zip_filename)
url = get_url(yesterday)
zip_filename = download_file(url)
if (zip_filename == False):
□□print("ダウンロード失敗")
□□sys.exit()
# zipファイルを展開する
csv_filename = zip_filename.replace(".zip", ".csv")
if (os.path.exists(csv_filename)):
□□os.remove(csv_filename)
zip_extract(zip_filename)
# 昨日の株価データのcsvファイルを読み込む
df = get_kabuka_list(csv_filename, codes)
# 各csvファイルの末尾に昨日の株価を追記する
for code in codes:
□□# 昨日の株価データから当該証券コードの行のみを抜き出す
□□record = df[df["code"] == int(code)][['高値', '安値', '終値', '出来高']]
□□row = datetime.strftime(yesterday, '%Y-%m-%d') + "," + str(record['高値'][0]) + "," + str(record['安値'][0]) + "," + str(record['終値'][0]) + "," + str(record['出来高'][0])
□□
□□# csvファイルの存在チェック
□□path = root_dir + "/data/" + code + "_all.csv"
□□if (not os.path.exists(path)):
□□□□print("追記対象のcsvファイルがない")
□□□□sys.exit()
□□
□□# 現状のcsvファイルの末尾の日付を判定する
□□current_csv = pd.read_csv(path,
□□□□□□□□□□□□□□ header=0,
□□□□□□□□□□□□□□ index_col=None,
□□□□□□□□□□□□□□ encoding="shift-jis")
□□last_date = datetime.strptime(current_csv[-1:].iat[0, 0], "%Y-%m-%d").date()
□□if (last_date < yesterday.date()):
□□□□# csvファイルの末尾に追記する
□□□□with open(path, 'a', encoding="shift-jis", newline="\r\n") as f:
□□□□□□print(row, file=f)
# ダウンロードしたファイルを削除する
os.remove(zip_filename)
os.remove(csv_filename)
import zipfile
import pandas as pd
from datetime import datetime, date, timedelta
import os
import sys
"""
URLを指定してカレントディレクトリにファイルをダウンロードする
"""
def download_file(url):
□□filename = url.split('/')[-1]
□□r = requests.get(url, stream=True)
□□with open(filename, 'wb') as f:
□□□□for chunk in r.iter_content(chunk_size=1024):
□□□□□□if chunk:
□□□□□□□□f.write(chunk)
□□□□□□□□f.flush()
□□□□return filename
□□
□□# ファイルが開けなかった場合は False を返す
□□return False
"""
ファイル名を指定してzipファイルをカレントディレクトリに展開する
"""
def zip_extract(filename):
□□target_directory = '.'
□□zfile = zipfile.ZipFile(filename)
□□zfile.extractall(target_directory)
"""
CSVファイルを読みこみ必要な株価データを取得する
"""
def get_kabuka_list(csv_filename, codes):
□□df = pd.read_csv(csv_filename,
□□□□□□□□□□ header=None,
□□□□□□□□□□ index_col=0,
□□□□□□□□□□ encoding="shift-jis")
□□
□□# 指定した証券コードの行に絞り込む
□□# 1: 証券コード
□□# 9: 取引所名
□□df = df[df[1].isin(codes) & (df[9] == "東証1部")]
□□
□□# 必要なカラムのみに絞り込む
□□# 1: 証券コード
□□# 5: 高値
□□# 6: 安値
□□# 7: 終値
□□# 8: 出来高
□□df = df[[1, 5, 6, 7, 8]].rename(columns={1:'code', 5:'高値', 6:'安値', 7:'終値', 8:'出来高'})
□□return(df)
"""
指定した日付のzipファイル名を取得
"""
def get_filename(date):
□□yymmdd = datetime.strftime(date, '%Y%m%d')[-6:]
□□filename = "T" + yymmdd + ".zip"
□□return(filename)
"""
指定した日付のURLを取得
"""
def get_url(date):
□□yyyy = datetime.strftime(date, '%Y')
□□yy_mm = datetime.strftime(date, '%Y_%m')[-5:]
□□yymmdd = datetime.strftime(date, '%Y%m%d')[-6:]
□□url = "http://mujinzou.com/k_data/" + yyyy + "/" + yy_mm + "/T" + yymmdd + ".zip"
□□return(url)
"""
本処理
"""
root_dir = ".."
code_list = "4719,6702"
codes = code_list.split(",")
yesterday = datetime.today() - timedelta(days=1)
# ダウンロードする
zip_filename = get_filename(yesterday)
if (os.path.exists(zip_filename)):
□□os.remove(zip_filename)
url = get_url(yesterday)
zip_filename = download_file(url)
if (zip_filename == False):
□□print("ダウンロード失敗")
□□sys.exit()
# zipファイルを展開する
csv_filename = zip_filename.replace(".zip", ".csv")
if (os.path.exists(csv_filename)):
□□os.remove(csv_filename)
zip_extract(zip_filename)
# 昨日の株価データのcsvファイルを読み込む
df = get_kabuka_list(csv_filename, codes)
# 各csvファイルの末尾に昨日の株価を追記する
for code in codes:
□□# 昨日の株価データから当該証券コードの行のみを抜き出す
□□record = df[df["code"] == int(code)][['高値', '安値', '終値', '出来高']]
□□row = datetime.strftime(yesterday, '%Y-%m-%d') + "," + str(record['高値'][0]) + "," + str(record['安値'][0]) + "," + str(record['終値'][0]) + "," + str(record['出来高'][0])
□□
□□# csvファイルの存在チェック
□□path = root_dir + "/data/" + code + "_all.csv"
□□if (not os.path.exists(path)):
□□□□print("追記対象のcsvファイルがない")
□□□□sys.exit()
□□
□□# 現状のcsvファイルの末尾の日付を判定する
□□current_csv = pd.read_csv(path,
□□□□□□□□□□□□□□ header=0,
□□□□□□□□□□□□□□ index_col=None,
□□□□□□□□□□□□□□ encoding="shift-jis")
□□last_date = datetime.strptime(current_csv[-1:].iat[0, 0], "%Y-%m-%d").date()
□□if (last_date < yesterday.date()):
□□□□# csvファイルの末尾に追記する
□□□□with open(path, 'a', encoding="shift-jis", newline="\r\n") as f:
□□□□□□print(row, file=f)
# ダウンロードしたファイルを削除する
os.remove(zip_filename)
os.remove(csv_filename)