64 lines
2.2 KiB
Python
64 lines
2.2 KiB
Python
'''장내채권 종목정보(bond_code.mst) 정제 파이썬 파일'''
|
|
|
|
import pandas as pd
|
|
import urllib.request
|
|
import ssl
|
|
import zipfile
|
|
import os
|
|
|
|
base_dir = os.getcwd()
|
|
|
|
def download_and_extract_file(url, output_dir, zip_filename, extracted_filename):
|
|
# Download the file
|
|
print(f"Downloading {zip_filename}...")
|
|
ssl._create_default_https_context = ssl._create_unverified_context
|
|
zip_filepath = os.path.join(output_dir, zip_filename)
|
|
urllib.request.urlretrieve(url, zip_filepath)
|
|
|
|
# Extract the file
|
|
print(f"Extracting {zip_filename}...")
|
|
with zipfile.ZipFile(zip_filepath, 'r') as zip_ref:
|
|
zip_ref.extractall(output_dir)
|
|
|
|
return os.path.join(output_dir, extracted_filename)
|
|
|
|
def get_bond_master_dataframe(file_path):
|
|
print("Parsing the file...")
|
|
with open(file_path, mode="r", encoding="cp949") as f:
|
|
lines = f.readlines()
|
|
|
|
data = []
|
|
for row in lines:
|
|
row = row.strip()
|
|
bond_type = row[0:2].strip()
|
|
bond_cls_code = row[2:4].strip()
|
|
stnd_iscd = row[4:16].strip()
|
|
rdmp_date = row[-8:].strip()
|
|
pblc_date = row[-16:-8].strip()
|
|
lstn_date = row[-24:-16].strip()
|
|
bond_int_cls_code = row[-26:-24].strip()
|
|
sname = row[16:-26].rstrip() # 종목명을 뒤에서부터 추출하여 남은 부분
|
|
|
|
data.append([bond_type, bond_cls_code, stnd_iscd, sname, bond_int_cls_code,
|
|
lstn_date, pblc_date, rdmp_date])
|
|
|
|
columns = ['유형', '채권분류코드', '표준코드', '종목명', '채권이자분류코드',
|
|
'상장일', '발행일', '상환일']
|
|
|
|
df = pd.DataFrame(data, columns=columns)
|
|
return df
|
|
|
|
# 채권종목코드 마스터파일 다운로드 및 파일 경로
|
|
url = "https://new.real.download.dws.co.kr/common/master/bond_code.mst.zip"
|
|
zip_filename = "bond_code.zip"
|
|
extracted_filename = "bond_code.mst"
|
|
|
|
file_path = download_and_extract_file(url, base_dir, zip_filename, extracted_filename)
|
|
|
|
# 데이터프레임 생성 및 엑셀 파일로 저장
|
|
df_bond = get_bond_master_dataframe(file_path)
|
|
|
|
# 엑셀 파일 저장
|
|
print("Saving to Excel...")
|
|
df_bond.to_excel('bond_code.xlsx', index=False)
|
|
print("Excel file created successfully.") |