이번 게시글에서는 trade_date.txt 파일 내에 거래일 데이터를 임의로 직접 입력한 후에 직접 거래일을 계산해보거나 거래일을 찾는 함수를 제작해볼 예정이다.
그 전에 앞서, 지난 게시글에서 def append_text() 함수를 통해 날짜 데이터를 입력해주는 코드를 구축했었는데 입력하는 데이터를 잘 살펴보면 단순하게 "20220101"과 같은 형태로 입력하도록 제작했었다. 단순히 이런 식으로 데이터를 입력하도록 한다면 열흘이 지난 후에 텍스트 파일에는 다음과 같은 텍스트가 입력되어 있을 것이다.
프로그래밍에 있어 우리가 사용할 데이터는 우리가 사용하기에 편리한 형태로 데이터를 저장해주어야 한다. 물론 위와 같이 데이터를 입력했다고 하더라도 단순하게 우리는 8칸마다 공백을 입력하도록 하여 띄운 다음에 이러쿵저러쿵 하는 데이터 처리 절차를 거쳐 데이터를 사용할 수 있긴 하지만, 애당초 아래와 같이 입력하는 게 훨씬 편할 것이다.
20220101 20220102 20220103 20220104 · · 20220110
보기 좋게 줄바꿈을 넣어보자.
띄어쓰기는 단순하게 \n을 입력해주면 된다. 다만 텍스트 형태의 데이터를 전달해주어야 하니 "20220101\n"의 형태로 전달되도록 해야 한다.
if trade_gubun == 0:
self.lineEdit_4.setText("장시작 전")
text = datee + "\n"
mf.append_text("거래일데이터", "trade_date", text)
텍스트 파일에 직접 날짜 데이터를 입력해보자.
단순하게 manage_folder.py 파일이 있는 폴더로 들어가면 "거래일데이터"라는 폴더가 생성되어 있을 것이고, 해당 폴더 내에는 trade_date.txt 파일이 있으며 그 파일을 더블클릭 해서 본인이 이 게시글을 보는 날을 기준으로 10개의 거래일 데이터를 직접 입력해주면 된다.
만약 이미 지난 2022년 2월 4일을 기준으로 하여 거래일 데이터를 입력해보고 싶다면, 설 연휴에 해당하는 1월 31일, 2월 1일, 2월 2일을 제외한 나머지 일자를 입력해주면 된다.
본인은 단순하게 거래일의 차이값을 계산할 것이기 때문에, 게시글을 작성하는 2022년 4월 10일을 기준으로 하여 10개의 거래일 데이터를 입력할 것이다.
이제 텍스트 파일의 내용을 불러와보자
텍스트 파일 내에 있는 내용을 읽는 함수는 manage_folder.py 내에 있는 def read_text() 를 사용하면 된다. 이 함수 역시 "폴더명"과 "파일명"이라는 두 개의 변수를 인자로 전달해주어야 한다.
read_text("거래일데이터", "trade_date")
>>>
type : list
['20220328\n', '20220329\n', '20220330\n', '20220331\n', '20220401\n', '20220404\n', '20220405\n', '20220406\n', '20220407\n', '20220408\n']
이제 위와 같이 리스트 형태의 데이터들이 반환되고 있음을 확인할 수 있다. 우리는 여기서 엔터키에 해당하는 \n을 제거해야 하는 절차를 거쳐야 한다. 약간의 혼동이 있을 수 있는데, \n이라는 텍스트는 텍스트 파일 내에서는 하나의 엔터키로 인식되지만 파이썬 내에서는 엔터키가 아닌 단순한 문자열로 인식된다. 즉, split() 이나 replace() 등의 메서드를 통해 데이터를 수정할 수 있다는 것이다.
그렇다면 이제 def read_text() 내의 맨 마지막 줄에서 print(data) 부분을 return data로 변경한 후에, read_text("거래일데이터", "trade_date") 부분을 실행하여 발생한 반환값을 result 변수에 입력해보도록 하자. (결과값은 동일하다.)
def read_text(name, file_name):
object_dir = dir + "/" + name
if os.path.exists(object_dir):
file_name_txt = object_dir + "/" + file_name + ".txt"
text = open(file_name_txt, 'rt')
data = text.readlines()
return data ## 수정된 부분
result = read_text("거래일데이터", "trade_date")
print(result)
>>>
['20220328\n', '20220329\n', '20220330\n', '20220331\n', '20220401\n', '20220404\n', '20220405\n', '20220406\n', '20220407\n', '20220408\n']
728x90
디럽따 거슬리는 \n를 제거해보자.
일단 반환된 데이터가 리스트 형태의 자료형을 갖고 있기 때문에, 반복문을 사용해서 제거해주는 방법밖에 없다. 리스트 형태의 자료형이긴 하나 하나 하나의 데이터는 문자열(string) 형태의 자료이기 때문에 replace를 사용할 수 있으며, 해당 메서드를 통해 \n을 빈칸으로 대체하도록 한 후에 day_data라는 리스트 내에 재입력하도록 하는 것이다.
result = read_text("거래일데이터", "trade_date")
day_data = []
for i in result:
date = i.replace("\n", "")
day_data.append(date)
print(day_data)
>>>
['20220328', '20220329', '20220330', '20220331', '20220401', '20220404', '20220405', '20220406', '20220407', '20220408']
드디어 우리만의 거래일 데이터를 만들었다!
본연의 목적을 잃어서는 안 된다. 우리는 특정 일자가 거래일이었는지 아닌지를 확인하기 위한 함수를 만들고자 했었고, 각 거래일 간의 거래일 차이는 며칠인지를 계산해내는 것이 목적이었다.