'''코스피주식종목코드(kospi_code.mst) 정제 파이썬 파일''' import urllib.request import ssl import zipfile import os import pandas as pd base_dir = os.getcwd() def kospi_master_download(base_dir, verbose=False): cwd = os.getcwd() if (verbose): print(f"current directory is {cwd}") ssl._create_default_https_context = ssl._create_unverified_context urllib.request.urlretrieve("https://new.real.download.dws.co.kr/common/master/kospi_code.mst.zip", base_dir + "\\kospi_code.zip") os.chdir(base_dir) if (verbose): print(f"change directory to {base_dir}") kospi_zip = zipfile.ZipFile('kospi_code.zip') kospi_zip.extractall() kospi_zip.close() if os.path.exists("kospi_code.zip"): os.remove("kospi_code.zip") def get_kospi_master_dataframe(base_dir): file_name = base_dir + "\\kospi_code.mst" tmp_fil1 = base_dir + "\\kospi_code_part1.tmp" tmp_fil2 = base_dir + "\\kospi_code_part2.tmp" wf1 = open(tmp_fil1, mode="w") wf2 = open(tmp_fil2, mode="w") with open(file_name, mode="r", encoding="cp949") as f: for row in f: rf1 = row[0:len(row) - 228] rf1_1 = rf1[0:9].rstrip() rf1_2 = rf1[9:21].rstrip() rf1_3 = rf1[21:].strip() wf1.write(rf1_1 + ',' + rf1_2 + ',' + rf1_3 + '\n') rf2 = row[-228:] wf2.write(rf2) wf1.close() wf2.close() part1_columns = ['단축코드', '표준코드', '한글명'] df1 = pd.read_csv(tmp_fil1, header=None, names=part1_columns, encoding='cp949') field_specs = [2, 1, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 5, 5, 1, 1, 1, 2, 1, 1, 1, 2, 2, 2, 3, 1, 3, 12, 12, 8, 15, 21, 2, 7, 1, 1, 1, 1, 1, 9, 9, 9, 5, 9, 8, 9, 3, 1, 1, 1 ] part2_columns = ['그룹코드', '시가총액규모', '지수업종대분류', '지수업종중분류', '지수업종소분류', '제조업', '저유동성', '지배구조지수종목', 'KOSPI200섹터업종', 'KOSPI100', 'KOSPI50', 'KRX', 'ETP', 'ELW발행', 'KRX100', 'KRX자동차', 'KRX반도체', 'KRX바이오', 'KRX은행', 'SPAC', 'KRX에너지화학', 'KRX철강', '단기과열', 'KRX미디어통신', 'KRX건설', 'Non1', 'KRX증권', 'KRX선박', 'KRX섹터_보험', 'KRX섹터_운송', 'SRI', '기준가', '매매수량단위', '시간외수량단위', '거래정지', '정리매매', '관리종목', '시장경고', '경고예고', '불성실공시', '우회상장', '락구분', '액면변경', '증자구분', '증거금비율', '신용가능', '신용기간', '전일거래량', '액면가', '상장일자', '상장주수', '자본금', '결산월', '공모가', '우선주', '공매도과열', '이상급등', 'KRX300', 'KOSPI', '매출액', '영업이익', '경상이익', '당기순이익', 'ROE', '기준년월', '시가총액', '그룹사코드', '회사신용한도초과', '담보대출가능', '대주가능' ] df2 = pd.read_fwf(tmp_fil2, widths=field_specs, names=part2_columns) df = pd.merge(df1, df2, how='outer', left_index=True, right_index=True) # clean temporary file and dataframe del (df1) del (df2) os.remove(tmp_fil1) os.remove(tmp_fil2) print("Done") return df kospi_master_download(base_dir) df = get_kospi_master_dataframe(base_dir) #df3 = df[df['KRX증권'] == 'Y'] df3 = df # print(df3[['단축코드', '한글명', 'KRX', 'KRX증권', '기준가', '증거금비율', '상장일자', 'ROE']]) df3.to_excel('kospi_code.xlsx',index=False) # 현재 위치에 엑셀파일로 저장 df3