ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [python] 다이어리 생성 프로그램
    카테고리 없음 2023. 3. 5. 17:38

    평소 일기를 컴퓨터를 통해 쓰고 있는데 항상 일기를 쓸때마다 양식을 다시 작성하거나 파일을 복사/붙여넣기 하는 식으로 일기를 만들고 있었다. 대충 양식은 이런 느낌..

    가끔 꿈 꿨을 때는 이런식으로도 쓰기도 한다. 또는 그냥 꿈만 적기도 한다. 

    파일 명은 일기를 쓰는 날로 하였다. 예를 들어 2023-03-05 이런식으로 파일명을 정해 날짜를 확인할 수 있도록 하였다. 

    아무튼 항상 이런식으로 양식을 만들거나 파일을 복붙하는게 귀찮았기 때문에 양식을 만들어주는 아주 간단한 프로그램을 만들기로 하였다. 아마도 나만 사용할 것이고, 무엇보다 귀찮아서 만드는 프로그램이기 때문에 사용자(어짜피 나지만)에게 편리하도록 하기 위해 노력했다. 사용자가 어떤 식으로 프로그램을 사용할지 먼저 생각해봤다. 

    프로그램의 궁극적인 목표는 프로그램을 실행했을 때 원하는 날짜의 일기를 생성하는 것으로 하였다. (일기를 까먹고 다음날 다다음날에 쓸 수도 있기 때문...) 또 생각해보니 내가 쓰는 양식이 총 3가지(일기만/꿈내용만/일기,꿈내용 모두) 정도니 그 양식 또한 선택할 수 있도록 하고 싶어졌다. 그렇게 간단한 프로그램을 만들 수 있었다. 

    import datetime
    day = input("날짜[x(x일 전) / yy-zz(yy월 zz일)] : ")
    
    filename = (datetime.datetime.now()-datetime.timedelta(int(day))).strftime("%Y-%m-%d")+".txt"
    
    tag = int(input("0[일기] 1[꿈] 2[일기/꿈] : "))
    
    text = "날씨 : \n기분 : "
    
    if tag == 0 or tag == 2:
        text += "\n\n"
    if tag == 1 or tag == 2:
        text += "\n\n어제 밤에 꾼 꿈 : "
    
    with open(filename, "w", encoding="utf-8") as f:
        f.write(text)

    그렇게 간단한 프로그램을 만들고 보니 불편한 점이나 추가하고 싶은 기능들이 몇가지 있었다. 

    먼저, 프로그램을 실행한 뒤에 폴더에서 파일을 찾아 다시 열어야 한다는 점이다. 그래서 프로그램이 종료되기 직전에 자동으로 프로그램이 열리도록 하였다. 

    두번째로, 프로그램이 자동으로 열리도록 해보니 이전 일기들을 열 수 있도록 하고 싶어졌다. 

    세번째로, 두번째 기능을 추가해보니 문제점이 생각났다. 이미 일기를 썼던 날짜를 입력했을 때 파일이 날라갈 위험이 있었다. 그래서 이 전에 이미 일기를 썼었다면 파일 추가 시 경고를 주기로 했다. 

    마지막으로, "X일 전" 형식으로 일기를 추가했던 기존 방식에서 OO월OO일을 추가할 수 있는 방식을 추가하였다. 

    그래서 다음과 같은 프로그램을 완성했다. 

    import datetime
    import os
    
    num = int(input("0[새로 만들기] 1[파일 열기] : "))
    day = input("날짜[x(x일 전) / yy-zz(yy월 zz일)] : ")
    if "/" in day:
        day = day.split("/")
        filename = f"{datetime.datetime.now().year}-{day[0]:0>2}-{day[1]:0>2}.txt"
    else:
        filename = (datetime.datetime.now()-datetime.timedelta(int(day))).strftime("%Y-%m-%d")+".txt"
        files = os.listdir(__file__+"\\..\\")
        if filename in files and num == 0:
            ans = input("선택하신 날짜에 일기가 이미 존재합니다.\n무시하고 새로 만드시겠습니까? [Y/N] : ")
            if ans in ['Y', 'y', 'Yes', 'yes']:
                pass
            elif ans in ['N', 'n', 'No', 'no']:
                num = 1
            else:
                exit()
    
    if num == 0:
        tag = int(input("0[일기] 1[꿈] 2[일기/꿈] : "))
    
        text = "날씨 : \n기분 : "
    
        if tag == 0 or tag == 2:
            text += "\n\n"
        if tag == 1 or tag == 2:
            text += "\n\n어제 밤에 꾼 꿈 : "
    
        with open(filename, "w", encoding="utf-8") as f:
            f.write(text)
    
    os.system(filename)

    간단히 코드 설명을 하자면, 현재 날짜와 몇일 전 등의 날짜를 확인하기 위해 datetime이라는 모듈을 사용했다. datetime의 datetime.now()라는 메소드 함수는 현재 날짜를 확인할 수 있고, timedelta()라는 메소드 함수를 통해 날짜를 더하거나 뺄 수 있다. 그리고 strftime()이라는 메소드 함수를 통해 원하는 양식의 문자열 형태로 날짜(+시간)을 출력할 수 있다. 

    그리고 파일을 열거나 파일이 있는지 확인하기 위해 os라는 모듈을 사용했다. os.system("문자열")은 "문자열"을 명령프롬프트에 작성한 것과 같은 효과를 준다. 또한 os.listdir()은 해당 경로 내에 있는 파일들을 검색할 수 있어서 이 메소드 함수를 통해 해당 날짜에 이미 일기가 있는지 확인하였다. 

    사용은 최대한 간단하고 빠르게 '숫자, y, n' 정도만으로 가능하고 사용법도 그냥 프로그램만 실행한다면 알 수 있을정도로 간단하다. 이 파일을 일기들을 저장해둘 폴더 안에 넣어둔다면 프로그램만을 실행하여 손쉽게 다이어리를 작성할 수 있다. 당연하게도 직접 일기 파일을 열어 내용을 확인 할 수 있고 수정도 가능하다. 당연하지만 주의점이라고 할만한 점은 파일을 닫기 전에 저장하려면 직접 저장해야한다는 점이지만 ctrl+s로 손쉽게 저장도 가능하니 이 점은 따로 기능을 추가하지는 않았다. 

Designed by Tistory.